数组--排序--组成最大数

【题】

组成最大数


任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。

输入: 自然数 n

输出: 各位数字组成的最大数

  测试输入 期待的输出 时间限制 内存限制 额外进程
测试用例 1 以文本方式显示
  1. 1593↵
以文本方式显示
  1. 9531↵
1秒 64M 0

【分析】

很显然,这是个排序的题。先用冒泡排序实现,很简单代码就不写了。

【代码】

冒泡排序的代码在我的Blog:http://blog.csdn.net/debug__boy/article/details/8170580中,代码的58-70行。


【多说一点】

这里提供一稍稍带点技巧的实现方法,不需要排序,利用数字0~9一次递增(排好序)的规律,直接得出结果。

代码如下:

#include "stdio.h"

int main(int argc, char **argv)
{
	char ch;
	int arr[10] = {0};		//存储各个数字出现的次数,初始化为0

	//统计各个数字出现的次数
	while(1)
	{
		ch = getchar();
		if (ch == '\n')
		{
			break;
		}
		arr[ch - '0']++;
	}

	int i, j;
	
	//输出各个数字出现的次数
	for (i = 9; i >= 0; i--)
	{
		printf("数字%d 出现%d次.\n", i, arr[i]);
	}

	//输出这些数组成的最大的数
	printf("\n组成的最大的数:\n");
	for (i = 9; i >= 0; i--)
	{
		for(j = arr[i]; j > 0; j--)
			printf("%d", i);
	}
	printf("\n");

	//输出这些数组成的最小的数,注意:0不输出
	printf("\n组成的最小的数:\n");
	for (i = 1; i <= 9; i++)
	{
		for(j = arr[i]; j > 0; j--)
			printf("%d", i);
	}
	printf("\n");

	return 0;
}

【运行截图】

数组--排序--组成最大数_第1张图片


你可能感兴趣的:(C语言基础)