数组排序算法之,组成最大数

来源:互联网 发布:godaddy虚拟主机 java 编辑:程序博客网 时间:2024/05/21 17:02

组成最大数(10分)
题目内容:
任意输入一个自然数,输出该自然数的各位数字组成的最大数。
输入格式:
自然数 n
输出格式:
各位数字组成的最大数
输入样例:
1593
输出样例:
9531[回车]
时间限制:500ms内存限制:32000kb

方案一:冒泡排序

#include<stdio.h>int main(void){char s[50];int n;scanf("%s",s);int i=0;while(s[i]!='\0'){n++;i++;}int j=0;char temp;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if(s[i]<s[j]){    temp=s[i];s[i]=s[j];s[j]=temp;}}}printf("%s\n",s);return 0;}

另一种算法

  • 稍稍带点技巧的实现方法,不需要排序,利用数字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;  }  

这种算法,所用时间超出范围,AC不了。

0 0
原创粉丝点击