您的位置:首页 > 其它

NYOJ 题目465

2017-07-17 15:17 141 查看

最大值和最小值

时间限制: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: