18.小丑排序

编程入门 行业动态 更新时间:2024-10-08 20:38:41

18.<a href=https://www.elefans.com/category/jswz/34/1722715.html style=小丑排序"/>

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<bits/stdc++.h>
using namespace std;
struct team { //因为有对的概念存在,所以用结构体将各对存储起来string first;string second;
};
int main() {int n;int key=1;while(cin>>n&&n!=0) {string arr[n];for(int k=0; k<n; k++)cin>>arr[k];if(n%2==1) { //n为奇数,说明存在单独一个人且名字最长team steam[(n-1)/2];string str;str=arr[n-1];//	cout<<str<<endl;for(int i=0,j=1,ii=0; ii<n/2; ii++,i+=2,j+=2) {//将各对存入结构体中steam[ii].first=arr[i];steam[ii].second=arr[j];}for(int i=0,j=n-1; i<n,j>0; i++,j--) { //再反过来将结构体中的按照规则存入数组中if(i==(n-1)/2) {arr[i]=str;break;}arr[i]=steam[i].first;arr[j]=steam[i].second;}cout<<"set-"<<key<<endl;for(int s=0; s<n; s++)cout<<arr[s]<<endl;key++;}if(n%2==0) { //n为偶数,说明存在单独一个人且名字最长team steam[n/2];for(int i=0,j=1,ii=0; ii<n/2; ii++,i+=2,j+=2) {//将各对存入结构体中steam[ii].first=arr[i];steam[ii].second=arr[j];}for(int i=0,j=n-1; i<n,j>0; i++,j--) {//再反过来将结构体中的按照规则存入数组中arr[i]=steam[i].first;arr[j]=steam[i].second;if(i+1==j)break;}cout<<"set-"<<key<<endl;for(int s=0; s<n; s++)cout<<arr[s]<<endl;key++;}}return 0;
}

更多推荐

18.小丑排序

本文发布于:2024-03-08 22:51:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1722716.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:小丑

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!