★实验任务
一群小孩子在玩游戏,游戏规则是这样子,给了一些卡片,上面有数字,现在要把卡片按照某一种序列排好,让这些数字重新链接组合成一个大数,求最大的数是什么。
★数据输入
第一行一个整数N
接下来N行,每行一个整数ai,为第i张卡片上的数值。(0<=ai<=100)
50%数据 1<=N<=50000
100%数据1<=N<=100000
★数据输出
输出重新组合好的大数。
输入示例
3
99
23
99
输出示例
999923
(本题用到了桶排序的思想)
#include<stdio.h>
int main(void){
int a[101] = {0}; //创建101个桶,每个桶存储该编号出现的次数
int i,N,k,j;
/*
获取输入
*/
scanf("%d",&N);
for(i=0;i<N;i++){
scanf("%d",&k);
a[k]++;
}
for(i=9;i>=1;i--){ //最外层循环十位数字
/*
先把各位数字大于十位数字的桶里的元素倒出来
*/
for(j = 9;j>=i;j--){
while(a[i*10+j]--)
printf("%d",i*10+j);
}
/*
把1~9的桶中与当前十位数相同的桶中的元素倒出,如输出完桶[99]的元素后,若桶[9]有元素就把桶[9]的元素输出
*/
while(a[j+1]--)
printf("%d",j+1);
/*
输出以当前外循环数 i 为十位数的剩余桶中的元素
*/
while(j){
while(a[i*10+j]--)
printf("%d",i*10+j);
j--;
}
while(a[i*10]--)
//倒出相应的整十数的桶里的元素,如 70,80,等等
printf("%d",i*10);
}
/*
桶[100]与桶[0]的元素最后倒出
*/
while(a[100]--)
printf("100"); //100
while(a[0]--) printf("0");
return 0;
}
最后
以上就是魁梧台灯最近收集整理的关于算法与数据结构实验题 5.18 小孩的游戏的全部内容,更多相关算法与数据结构实验题内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复