最大值和最小值
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
1
- 描述
-
小明在上C语言课时老师布置了一道编程作业,要求是给你一个数(数的长度小于100)让你求出由该数的数字组成的最大值和最小值,由于小明编程学的不好但为了完成作业,想请你帮助他。
- 输入
- 第一行输入一个数N(0<N<=100),表示有N组测试数据。接下来的N行每行输入一个数M。
- 输出
- 每组输出占一行,输出由M的数字组成的最大值和最小值,并且最大值和最小值之间用空格隔开。
- 样例输入
-
2 12345045789123 899000124
- 样例输出
-
98755443322110 1122334455789 998421000 124899
-
这道题的思路很明确,字符数组输入,然后分别用两个整形的数组存放数据,之后对两个数组排序,排序最大值的数组中零要存放,排序最小值的数组中零不要存放。同时如果输入的全是零,输出格式只需为0 0就可以,可以用一个变量统计零的个数,然后看零的个数是否与输入的位数相同。
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> int comp1(const void*a,const void*b) { return *(int*)b-*(int*)a; } int comp2(const void*a,const void*b) { return *(int*)a-*(int*)b; } int main() { int n,i,j,k,z,Len1,t,sum; int number1[120]={0},number2[120]={0}; char s[120]; scanf("%d",&n); for(z=0;z<n;z++) { scanf("%s",s); Len1=strlen(s); for(i=0,j=0,k=0,sum=0;i<Len1;i++) { t=s[i]-'0'; if(t!=0) { number1[k]=t; number2[j]=t; j++; k++; } if(t==0) { number1[k]=t; k++; sum++; } } if(sum==Len1)/*考虑输入全是零的情况,输入全是零,最大最小值输出0 0*/ { printf("0 0\n"); continue; } qsort(number1,k,sizeof(int),comp1); qsort(number2,j,sizeof(int),comp2); for(i=0;i<k;i++) { if(i!=(k-1)) printf("%d",number1[i]); if(i==(k-1)) printf("%d ",number1[i]); } for(i=0;i<j;i++) { if(i!=(j-1)) printf("%d",number2[i]); if(i==(j-1)) printf("%d",number2[i]); } printf("\n"); } return 0; }