UVa 10905 Children's Game
2016-03-11 23:57
363 查看
There are lots of number games for children. These games are pretty easy to play but not so easy tomake. We will discuss about an interesting game here. Each player will be given N positive integer.(S)He can make a big integer by appending those integers
after one another. Such as if there are 4 integers as 123, 124, 56, 90 then the following integers can be made — 1231245690, 1241235690,5612312490, 9012312456, 9056124123, etc. In fact 24 such integers can be made. But one thing is sure that 9056124123 is
the largest possible integer which can be made.
You may think that it’s very easy to find out the answer but will it be easy for a child who has just got the idea of number?
Input
Each input starts with a positive integer N (≤ 50). In next lines there are N positive integers. Inputis terminated by N = 0, which should not be processed.
Output
For each input set, you have to print the largest possible integer which can be made by appending allthe N integers.
Sample Input
4
123 124 56 90
5
123 124 56 90 9
5
9 9 9 9 9
0
Sample Output
9056124123
99056124123
99999
题意:把n个正整数连接起来,输出最大的连接结果。
对于任意两个正整数a和b,要么a在前,要么b在前。到底选择a在前还是b在前呢?只要比较一下a-b和b-a是字典序大小就行了。比如9和90,由于990>909,所以a应该在前面。
依照这样的方法对输入的数字进行排序后再输出就行了。
由于懒得去运算两个数连接后的结果,所以程序中直接用了C++的string类。虽然牺牲了点效率,但是对于本题的数据规模来说并没有什么大的影响。
代码如下:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string A[55];
bool cmp(string a,string b)
{
return a+b>b+a;
}
int main()
{
int n;
while(cin>>n&&n)
{
for(int i=0;i<n;i++)
cin>>A[i];
sort(A,A+n,cmp);
for(int i=0;i<n;i++)
cout<<A[i];
cout<<endl;
}
}
after one another. Such as if there are 4 integers as 123, 124, 56, 90 then the following integers can be made — 1231245690, 1241235690,5612312490, 9012312456, 9056124123, etc. In fact 24 such integers can be made. But one thing is sure that 9056124123 is
the largest possible integer which can be made.
You may think that it’s very easy to find out the answer but will it be easy for a child who has just got the idea of number?
Input
Each input starts with a positive integer N (≤ 50). In next lines there are N positive integers. Inputis terminated by N = 0, which should not be processed.
Output
For each input set, you have to print the largest possible integer which can be made by appending allthe N integers.
Sample Input
4
123 124 56 90
5
123 124 56 90 9
5
9 9 9 9 9
0
Sample Output
9056124123
99056124123
99999
题意:把n个正整数连接起来,输出最大的连接结果。
对于任意两个正整数a和b,要么a在前,要么b在前。到底选择a在前还是b在前呢?只要比较一下a-b和b-a是字典序大小就行了。比如9和90,由于990>909,所以a应该在前面。
依照这样的方法对输入的数字进行排序后再输出就行了。
由于懒得去运算两个数连接后的结果,所以程序中直接用了C++的string类。虽然牺牲了点效率,但是对于本题的数据规模来说并没有什么大的影响。
代码如下:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string A[55];
bool cmp(string a,string b)
{
return a+b>b+a;
}
int main()
{
int n;
while(cin>>n&&n)
{
for(int i=0;i<n;i++)
cin>>A[i];
sort(A,A+n,cmp);
for(int i=0;i<n;i++)
cout<<A[i];
cout<<endl;
}
}
相关文章推荐
- 1.10055 - Hashmat the brave warrior
- 2.10071 - Back to High School Physics
- 3.458 - The Decoder
- 4.694 - The Collatz Sequence
- 6.494 - Kindergarten Counting Game
- 7.490 - Rotating Sentences
- 8.414 - Machined Surfaces
- 9.488 - Triangle Wave
- A.457 - Linear Cellular Automata
- B.489 - Hangman Judge
- C.445 - Marvelous Mazes
- 1.10494 - If We Were a Child Again
- 2.424 - Integer Inquiry
- 3.10250 - The Other Two Trees
- 5.465 - Overflow
- 6.113 - Power of Cryptography
- 7.10161 - Ant on a Chessboard
- 8.621 - Secret Research
- 9.401 - Palindromes
- A.537 - Artificial Intelligence?