NYOJ-最大值和最小值

题目描述

小明在上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");
	}
} 

猜你喜欢

转载自blog.csdn.net/basketball616/article/details/86636391
今日推荐