题目描述
小明在上C语言课时老师布置了一道编程作业,要求是给你一个数(数的长度小于100)让你求出由该数的数字组成的最大值和最小值,由于小明编程学的不好但为了完成作业,想请你帮助他。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。接下来的N行每行输入一个数M。
输出
每组输出占一行,输出由M的数字组成的最大值和最小值,并且最大值和最小值之间用空格隔开。
样例输入
2 12345045789123 899000124
样例输出
98755443322110 1122334455789 998421000 124899
分析:简单的排序问题,输入字符串后对每个字符进行桶排序,倒序输出时从9开始0结束,正序输出时从1开始9结束即可。
#include<stdio.h>
#include<string.h>
const int M=1e2+5;
typedef long long ll;
ll n,x,b[15],len,i,j,k,t;
char a[M];
int main()
{
scanf("%d",&x);//输入测试次数
while(x--)
{
t=0;
memset(b,0,sizeof(b));//初始化
scanf("%s",a);
len=strlen(a);
for(i=0;i<len;i++)//将输入的每个字符转换成数字后放入桶中
b[a[i]-'0']++;
for(i=9;i>=0;i--)//倒序输出从9到0的所有数字
{
if(b[i]!=0)
for(j=1;j<=b[i];j++)
printf("%d",i);
}
printf(" ");
for(i=1;i<=9;i++)//输出从1到9的所有数字
{
if(b[i]!=0)
for(j=1;j<=b[i];j++)
{printf("%d",i);t=1;}
}
if(t==0)//如果全为0,正序输出时仅输出1个0即可
printf("0");
printf("\n");
}
}