1042: 小丑排序
时间限制: 1 Sec 内存限制: 128 MB提交: 149 解决: 121
[提交][状态][讨论版]
题目描述
你在信天翁马戏团(是的,它是由一群小丑组成)从事管理工作,你刚刚写完一个程序的输出是将他们的姓名按长度为非递减的方式排列,名称列表(使每名至少只要它之前的)。然而,你的老板不喜欢这种输出方式,而是希望输出出现更对称,较短的字符串在顶部和底部,而较长的字符串在中间。他的规则是,每一对名称都是在该列表的相对的两端,并且在该组中的第一个名字总是在列表的顶部。比如在下面的第一个例子中,Bo和Pat是第一对,Jean和Kevin是第二对,等等。
输入
输入由1到多个字符串集合组成,最后一行为0表示输入结束,每个集合开始于一个整数n,表示该集合字符串的个数,接下来n行由n个字符串按长度非递减的方式排列,每个集合至少包含一个但不超过15个字符串,每个字符串不超过25个字符。
输出
对于每个集合,第一行输出"set-n", n从1开始,接下来的若干行对应输入每个集合重新排列的结果,如样例所示。
样例输入
7
Bo
Pat
Jean
Kevin
Claude
William
Marybeth
6
Jim
Ben
Zoe
Joey
Frederick
Annabelle
5
John
Bill
Fran
Stan
Cece
0
样例输出
set-1
Bo
Jean
Claude
Marybeth
William
Kevin
Pat
set-2
Jim
Zoe
Frederick
Annabelle
Joey
Ben
set-3
John
Fran
Cece
Stan
Bill
提示
来源
#include <iostream>
using namespace std;
int main(){
int n,i,k,num=1;
string a[100],b[100];
while(cin>>n&&n!=0){
k=0;
for(i=0;i<n;i++){
cin>>a[i];
}
for(i=0;i<n;i=i+2){
if(i==n-1){
b[k]=a[i];
}else{
b[k]=a[i];
b[n-1-k]=a[i+1];
k=k+1;
}
}
cout<<"set-"<<num++<<endl;
for(i=0;i<n;i++){
cout<<b[i]<<endl;
}
}
return 0;
}