我是靠谱客的博主 魁梧台灯,这篇文章主要介绍算法与数据结构实验题 5.18 小孩的游戏,现在分享给大家,希望可以做个参考。

★实验任务

一群小孩子在玩游戏,游戏规则是这样子,给了一些卡片,上面有数字,现在要把卡片按照某一种序列排好,让这些数字重新链接组合成一个大数,求最大的数是什么。

★数据输入

第一行一个整数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 小孩的游戏的全部内容,更多相关算法与数据结构实验题内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(104)

评论列表共有 0 条评论

立即
投稿
返回
顶部