欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

问题 : 小丑排序

程序员文章站 2022-06-01 12:51:59
...

题目描述
你在信天翁马戏团(是的,它是由一群小丑组成)从事管理工作,你刚刚写完一个程序的输出是将他们的姓名按长度为非递减的方式排列,名称列表(使每名至少只要它之前的)。然而,你的老板不喜欢这种输出方式,而是希望输出出现更对称,较短的字符串在顶部和底部,而较长的字符串在中间。他的规则是,每一对名称都是在该列表的相对的两端,并且在该组中的第一个名字总是在列表的顶部。比如在下面的第一个例子中,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

AC代码

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string str[20];
int main()
{
    int n,caseno=0;
    while(scanf("%d",&n)&&n!=0){
            caseno++;
        for(int i=1;i<=n;i++){
            cin>>str[i];
        }
        cout<<"set-"<<caseno<<endl;
        if(n%2==0){
            for(int i=1;i<=n;){
                cout<<str[i]<<endl;
                i+=2;
            }
            for(int i=n;i>=2;){
                cout<<str[i]<<endl;
                i-=2;
            }
        }else{
              for(int i=1;i<=n;){
                cout<<str[i]<<endl;
                i+=2;
            }
            for(int i=n-1;i>=2;){
                cout<<str[i]<<endl;
                i-=2;
            }
        }
    }
    return 0;
}