六学家的困惑

六学家的困惑

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

小六喜欢两全其美的事情,今天就正好有一个这样的机会。

小六面前有两根管子,管子里面放满了数字为1到9的小球。每次取球时,小六会先选择一根管子,再从这根管子的某一侧(左侧或右侧)取出一个球。在满足取球规则的情况下,他可以任意顺序取出所有小球。假如小六依次取出的球的编号为a1,a2,⋯,ana1,a2,⋯,an,则他最后就得到了一个形如¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯a1a2⋯ana1a2⋯an¯样的十进制数。

小六希望他的取球顺序所组成的数是最大的,你可以帮一下他吗?

输入描述:

第一行输入数据组数。T (T≤14)T (T≤14)

接下来T行,每行输入两串只含1∼91∼9的数字,表示两根管子里的小球的数字。每根管子内至少含1个小球,且数量不超过40个。

输出描述:

对每一组数据,输出一行Case #x: A,其中x是数据组数编号(从1开始),A是小六能组成的最大的数。

示例1

输入

复制

2
123456 123456
9876346789 9854894589

输出

复制

Case #1: 665544332211
Case #2: 99998888776655498443

这个题目是一个字符串的题目 他让我感受到了STL的魅力

我也发现我有很多的字符串函数完全不知道

比如reverse(a.begin(),a.end()); 这个函数代表了字符串反转函数

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string a; 
	cin>>a;
	reverse(a.begin(),a.end());
	cout<<a<<endl;
	return  0; 
}

结果如下:第一行输入 第二行输出 

还有 a.erase(x,y) 代表从x开始删 删掉y个字符

erase(first,last); 删除从first到last之间的字符 如erase(a.begin()+5,a.end()-7);删除开头第5个到结尾倒数第7个。

swap(a,b) 交换函数 把a b 的值都交换

AC代码:

#include<bits/stdc++.h>
using namespace std;
int t;
string a,b,temp;
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>a>>b;
		while(a.length()||b.length())
		{
			temp=a;
			reverse(a.begin(),a.end());//反转函数 
			a=max(a,temp);//相当于a的第一个字符是俩端最大的一个 
			temp=b;
			reverse(b.begin(),b.end());//反转函数 
			b=max(b,temp);//同上 
			if(a<b)
			swap(a,b);//交换ab  让a的第一个字符是四个字符中最大的 
			cout<<a[0];//一个个输出 
			a.erase(0,1);//一个个删除 
		}
		cout<<endl;
	}
	return  0;
}

猜你喜欢

转载自blog.csdn.net/tjndsg/article/details/89293676
今日推荐