数组排序算法之,组成最大数
来源:互联网 发布: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
- 数组排序算法之,组成最大数
- 数组--排序--组成最大数
- leetcode 179.最大数量 【数组组成最大数】
- 数组排序 —— 桶排序算法思想应用(相邻两数最大差)
- 找出二维数组各数组中最大数并组成新数组
- 算法学习---求数组中的最大数
- 算法之最大子数组
- C++数组排成最大的数(数组,算法,排列)
- Java从键盘中读取一串数字存入数组,并返回元素组成的最大数
- 给定一个数组,元素都是正整数,要求返回这些元素所组成的最大数
- 贪心算法之寻找最大数
- 算法之 求最小最大数
- 贪心算法之寻找最大数
- 求数组排序后相邻数的最大差值
- leetcode:排序数组之后相邻数的最大差
- 求数组排序后相邻两个数的最大差值
- 数组排序之后相邻数的最大差值
- 排序数组中的相邻两数最大差值
- 网络流24题 飞行员配对
- ES安装以及使用
- L1-031. 到底是不是太胖了 java
- ACM-生理周期
- LIntCode 等价二叉树
- 数组排序算法之,组成最大数
- Mac brew 安装
- 整数划分(转载) + poj1221 UNIMODAL PALINDROMIC DECOMPOSITIONS
- C函数之memcpy()函数用法
- 八、Bean的作用范围
- Docker的安装配置及使用详解
- 跟小博老师一起学习数据库 ——多表查询
- 彻底解决各种 Gradle 报错
- LintCode 将二叉树拆成链表