18. 小丑排序
程序员文章站
2022-06-01 12:51:41
...
没啥好讲的,小丑竟是我自己。第一遍写完交上去又全错。原来是“set-n”里的n忘记给它递增了
【问题描述】
你在信天翁马戏团(是的,它是由一群小丑组成)从事管理工作,你刚刚写完一个程序的输出是将他们的姓名按长度为非递减的方式排列,名称列表(使每名至少只要它之前的)。然而,你的老板不喜欢这种输出方式,而是希望输出出现更对称,较短的字符串在顶部和底部,而较长的字符串在中间。他的规则是,每一对名称都是在该列表的相对的两端,并且在该组中的第一个名字总是在列表的顶部。比如在下面的第一个例子中,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 <bits/stdc++.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv)
{
int n,m=1;
while(cin>>n&&n){
cout<<"set-"<<m<<endl;
m++;
string x[n];
for(int i=0;i<n;i++){
cin>>x[i];
}
int count=(n-1)/2-1;
int p=count+1;
string temp[p];
for(int i=0;i<n;i++){
if(i%2==0){
continue;
}
temp[count]=x[i];
x[i]="0";
count--;
if(count<0)break;
}
for(int i=0;i<n;i++){
if(x[i]=="0")continue;
cout<<x[i]<<endl;
}
for(int i=0;i<p;i++){
cout<<temp[i]<<endl;
}
}
return 0;
}
上一篇: 朱元璋是怎么解决威望不足的问题的?
下一篇: sql数据库常用操作