【程序设计训练】2-18 小丑排序

问题描述

你在信天翁马戏团(是的,它是由一群小丑组成)从事管理工作,你刚刚写完一个程序的输出是将他们的姓名按长度为非递减的方式排列,名称列表(使每名至少只要它之前的)。然而,你的老板不喜欢这种输出方式,而是希望输出出现更对称,较短的字符串在顶部和底部,而较长的字符串在中间。他的规则是,每一对名称都是在该列表的相对的两端,并且在该组中的第一个名字总是在列表的顶部。比如在下面的第一个例子中,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;
	int sum=0;
	while(cin>>n&&n!=0) {
		sum++;
		cout<<"set-"<<sum<<endl;
		string str[n];
		for(int i=0; i<n; i++)
			cin>>str[i];
		if(n%2==0) {
			for(int i=0; i<n; i+=2)cout<<str[i]<<endl;
			for(int i=n-1; i>0; i-=2)cout<<str[i]<<endl;
		} else {
			for(int i=0; i<n; i+=2)cout<<str[i]<<endl;
			for(int i=n-2; i>0; i-=2)cout<<str[i]<<endl;
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈伦HL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值