(题目来源--西工大计算机微信公众号)
1.输入两组时间(h,m,s),计算平均时间。两组时间不超过一个小时,h在0-11之间
Input:
1 20 30 1 30 30
0 20 30 11 30 30
Output:
1 25 30
11 55 30
参考代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct TIME{
int h;
int m;
int s;
}T;//定义一个关于时间的结构体;
int main(){
int n=2;//两组数据
while(n--){
T a,b,aver;
int sum;
scanf("%d%d%d%d%d%d",&a.h,&a.m,&a.s,&b.h,&b.m,&b.s);
if(a.h==0)//0代表12
a.h=12;
if(b.h==0)//0代表12
b.h=12;
sum=((a.h+b.h)*60*60+(a.m+b.m)*60+(a.s+b.s))/2;//把时间和化成秒为单位
aver.h=sum/3600;//平均时间的小时位
aver.m=(sum%3600)/60;//平均时间的分钟位
aver.s=(sum%3600)%60;//平均时间的秒位
printf("%d %d %d\n",aver.h,aver.m,aver.s);
}
system("pause");
return 0;
}
2.排序,输入n组数,由小到大进行排序
输入样例:
2
1 5 8 6 3 2 0
4 2 3 8 15 63 20 1
Output:
0 1 2 3 5 6 8
1 2 3 4 8 15 20 63
参考代码:
#include<stdio.h>
void quicksort(int data[],int begin,int end)
{
//变量定义及初始化
int i = begin,j = end;
int key,temp;
key = data[begin];
//递归跳出条件
if(begin >= end)
return;
//快速排序算法
while(i < j)
{
while(i < j && key <= data[j])
j--;
if(key >= data[j])
{
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
while(i < j && key >= data[i])
i++;
if(key <= data[i])
{
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
//快速排序的二分法
quicksort(data,begin,i-1);
quicksort(data,j+1,end);
}
int main()
{
int n,data[100],i,length;
scanf("%d",&n);
char ch;
while(n--)
{
length = 0;
do
{
scanf("%d",&data[length]);
length++;
}while((ch=getchar())!= '\n');
quicksort(data,0,length-1);
for(i = 0;i < length;i++)
printf("%d ",data[i]);
printf("\n");
}
}
3.输入行数,再在每行输入一个表达式,得出结果
Input:
3
1+1
2.2/3
1+2*3+2
Output:
2
0.7
9
参考代码:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
double a[100],sum=0;
char c;
int i=0;
scanf("%lf",&a[0]);
c=getchar();
while(c!='\n')
{
double temp;
scanf("%lf",&temp);
switch(c)
{
case '+':a[++i]=temp;break;
case '-':a[++i]=-temp;break;
case '*':a[i]*=temp;break;
case '/':a[i]/=temp;break;
}
c=getchar();
}
for(int j=0;j<=i;j++)
{
sum=sum+a[j];
}
if(sum-int(sum)<=1e-6) printf("%.0f\n",sum);
else printf("%.1f\n",sum);
}
return 0;
}
4.括号匹配,输入测试行数n,每行输入一个样例,判断是否匹配,是则输出yes,否则输出no。
Input:
2
([89])
([{}])
(({
{}}
Output:
yes
yes
no
参考代码:
#include<stdio.h>
#include<string.h>
#define MAX_SIZE 1000
void check(int T){
char str[MAX_SIZE];
while(T--){
int flag=1;
//统计小括号中括号和大括号的数量
int fa=0,fb=0,fc=0,fd=0,fe=0,ff=0;
cin>>str;
int len=strlen(str);
for(int i=0;i<len;i++){
switch(str[i]){
case '[':fa++;break;
case ']':fb++;break;
case '(':fc++;break;
case ')':fd++;break;
case '{':fe++;break;
case '}':ff++;break;
}
if(i==0)
continue;
//当括号为)(判断其合法性;
if(str[i]=='('&&str[i-1]==')'){
flag=0;break;
}
}
if(fa!=fb||fc!=fd||fe!=ff)//判断括号数量是否匹配,如果不匹配,则不合法;
flag=0;
if(flag==1)
printf("Yes\n");
else
printf("No\n");
}
}
int main(){
int t=0;
printf("%d",&t);
check(t);
system("pause");
return 0;
}