考试题目“笨笨玩游戏”

【题目描述】

一天,笨笨和妈妈玩游戏,妈妈 给笨笨出N个正整数,让笨笨把这N个正整数连接生成一个“大”的整数,每个正整数只使用一次,让笨笨告诉妈妈这样生成的大整数的最大值。

例如,给出4个整数:123, 124, 56, 90,可以连接生成的大整数有:1231245690, 1241235690, 5612312490, 9012312456, 9056124123等等,对本例,总共可以生成24个大整数。而其实最大整数是:9056124123

【输入】

第1行:1 个整数N(1<=N<=50)

第2行:N个整数,每个整数不超过INT_MAX。

【输出】

第1行:生成的最大整数。

【样例输入】

123 124 56 90 

【样例输出】

9056124123

这道题刚开始看,觉得直接用sort就行了,结果错了   T-T

后来一想,原来有很多BUG,比如 234和2345,程序会输出 2342345

明显不是最大的,所以要自己写sort函数(天下没有白来的!!)

 

要考虑当两个数不一样长时,并且同样长的地方相等时要将长的尾部和短的头部作比较

 

 

代码如下:

<span style="font-size:12px;BACKGROUND-COLOR: #ffff99">#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stack>
#include<queue>
using namespace std;
struct ill{
	char s[100];
}a[100];
int n,i;
bool fuu(ill x,ill y)
{
	int q=0,p=0;
	for(int i=0;;i++)
	{
		if(x.s[q]<y.s[p])
			return 0;
		else if(x.s[q]>y.s[p])
			return 1;
		if(x.s[q+1]==0)
		{
			q=q;
			if(x.s[q]<y.s[0])
				return 1;
		}
		else
			q++;
		if(y.s[p+1]==0)
		{
			p=p;
			if(y.s[p]<x.s[0])
				return 0;
		}
		else
			p++;
		if(x.s[q+1]==0&&y.s[p+1]==0)
			break;
	}
	if(x.s[q]<y.s[p])
		return 0;
	return 1;
}
int main()
{
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%s",a[i].s);
	sort(a+1,a+1+n,fuu);
	for(i=1;i<=n;i++)
		printf("%s",a[i].s);
}
</span>

 

错了无数次

终于AC了!!

posted @ 2016-09-06 13:46  Izayoi_Doyo  阅读(134)  评论(0编辑  收藏  举报