码迷,mamicode.com
首页 > 其他好文 > 详细

HDU ACM 4550 卡片游戏

时间:2015-05-02 15:16:10      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:c   c++   acm   算法   开发者   

分析:分为三部分处理,第一部分找到除0外最靠右的最小数字A作为第一位;第二部分是这个最小数字A前面的数字均按规则排列,也就是每取出一张大的放在第二部分的后面,小的放在第二部分的前面;第三部分就是这个最小数A后面的数字按原顺序放在最后即可;最终即可组出新的串。

例子:9876105432

第一部分:1

第二部分:9876,处理后为6789

第三部分:05432

最后按照第一部分,第二部分,第三部分的顺序组出新串:1678905432既是最终结果。

#include<iostream>
using namespace std;

int main()
{
	int T,i,minnum,minindex,j,k;
	char a[105];
	char b[305];

	cin>>T;
	getchar();
	while(T--)
	{
		gets(a);
		minnum=100;
		for(i=strlen(a)-1;i>=0;i--)
			if(a[i]<minnum && a[i]!='0')
			{
				minnum=a[i];
				minindex=i;
			}

		if(minnum==100) minnum=a[0];
		b[0]=minnum;

		j=-2;
		k=-1;
		if(strlen(a)>=2)
		{
			if(minindex!=0)
			{
				k=j=150;
				b[k]=a[0];
				for(i=1;i<minindex;i++)
					if(b[k]>=a[i])
					{
				    	k--;
			    		b[k]=a[i];
					}
			    	else
					{
			    		j++;
			    		b[j]=a[i];
					}
			}
		}
		putchar(b[0]);
		for(i=k;i<=j;i++)
			putchar(b[i]);
		for(i=minindex+1;i<strlen(a);i++)
			putchar(a[i]);
		cout<<endl;
	}
	return 0;
}


HDU ACM 4550 卡片游戏

标签:c   c++   acm   算法   开发者   

原文地址:http://blog.csdn.net/a809146548/article/details/45439539

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!