题目描述
给出若干个十进制数、八进制数、十六进制数,请你输出其中最大的一个数,并保留它在输入中的进制
当有多个数为最大时,请输出这些数中在输入中最早出现的一个
输入
输入共有四行
第一行三个用空格隔开的十进制整数 x, y, z (1≤x,y,z≤100),分别代表十进制数、八进制数、十六进制数的个数
第二行 x 个用空格隔开的十进制数
第三行 y 个用空格隔开的八进制数
第四行 z 个用空格隔开的十六进制数,其中字母为小写英文字母
对所有给出的整数 a,0≤a≤108
输出
输出一个整数代表最大值,保留这个数在输入时的进制
当有多个数为最大时,输出这些数中在输入中最早出现的一个
样例输入
2 1 1 123 456 24 34f
样例输出
34f
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int k=0,x,y,z,i,a;
int max1=0,max2=0,max3=0,sum8=0;
int shi,ba,shiliu;
scanf("%d %d %d",&x,&y,&z);
for(i=1;i<=x;i++)
{
scanf("%d",&shi);
if(shi>max1)
{
max1=shi;}
}
for(i=1;i<=y;i++)
{
scanf("%d",&ba);
if(ba>max2)
{
max2=ba;
}
}
a=max2;//保留八进制的原始的数
for(i=1;i<=z;i++)
{
scanf("%x",&shiliu);
if(shiliu>max3)
{
max3=shiliu;
}
}
while(max2>0)
{
sum8+=(max2%10)*pow(8,k);
max2=max2/10;
k++;
}
if((max1>=sum8)&&(max1>=max3))//十六进制直接进行比较
printf("%d",max1);
else if((sum8>max1)&&(sum8>=max3))
printf("%d",a);
else printf("%x",max3); //直接输出十六进制
}
二、
实验3-4 统计字符 (15 分)
本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
输入格式:
输入为10个字符。最后一个回车表示输入结束,不算在内。
输出格式:
在一行内按照
letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数
的格式输出。
输入样例:
aZ &
09 Az
结尾无空行
输出样例:
letter = 4, blank = 3, digit = 2, other = 1
结尾无空行
#include<stdio.h>
int main()
{
char c;
int i,sum1=0,sum2=0,sum3=0,sum4=0;
char a[100];//数组适量开大一些,防止数组越界,经常性错误
while((c=getchar())!=EOF)
{
a[i++]=c;
}
//上一句可以这样写
//for(i=0;i<10;i++)
//{
// a[i]=getchar();
//}
for(i=0;i<10;i++)
{
if(a[i]<='9'&&a[i]>='0') sum1++;
else if(a[i]==' '||a[i]=='\n') sum2++;
else if(a[i]>='A'&&a[i]<='Z'||a[i]>='a'&&a[i]<='z') sum3++;//小写字母与大写字母之间还有一些其他代码
//else if(a[i]>='A'&&a[i]<='z')这样写是不对的
else sum4++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d",sum3,sum2,sum1,sum4);
}