首页 > 技术文章 > [实战演练]史上最长最醒目的队名

xuning 2013-09-16 23:01 原文

Problem Description

Jack所在的班级决定组团报名参加FZU校赛。为了体现班级的团结和睦,班长决定用班级所有人的名字连起来组成一个史上最长最醒目的队名。

因为听说在分数相同的情况下,队名字典序小的会排在更前面,班长还希望连成的史上最长队名拥有最小的字典序。

Input 输入数据第一行包含一个整数T,表示测试数据的组数。对于每组测试数据:

第一行为一个整数(10000>=n>0),表示班级成员数。 接下来n行为班级每个人的名字。名字由小写字母组成,每个人名字长度均相同。

Output 对于每组测试数据,输出一行,表示连接成的史上最长队名。

 

Sample Input

1

3

jim

tom

joe

 

Sample Output

jimjoetom

 1 #include <iostream>
 2 #include <string>
 3     
 4 using namespace std;
 5 
 6 void paixu(string *str, int nameNum){
 7     for(int i=0;i<nameNum;i++){
 8         for(int j=nameNum-1;j>i;j--){
 9             if(str[j-1]>str[j]){
10                 string temp = str[j-1];
11                 str[j-1] = str[j];
12                 str[j] = temp;
13             }
14         }
15     }
16 }
17 
18 int main()
19 {
20     int k1;
21     cin>>k1;
22     int nameNum;
23     string *rec = new string[k1];
24     for(int i=0;i<k1;i++){
25         cin>>nameNum;
26         string *str = new string[nameNum];
27         for(int k=0;k<nameNum;k++){
28             cin>>str[k];
29         }
30         paixu(str, nameNum);
31         for(int k=0;k<nameNum;k++){
32             rec[i] = rec[i]+ str[k];
33         }
34         delete[] str;
35     }
36     for(int i=0;i<k1;i++){
37         cout<<rec[i]<<endl;
38     }
39     delete[] rec;
40     //system("pause");
41     return 0;
42 }

其中paixu()这个函数要写一个数组排序算法,省懒事写了个简单的冒泡排序,其实可以改成快速排序或者归并排序来提升一下效率。这个题目是wenda60.com上面的,不过把这段代码提交之后总是显示“答案正确但是输出格式不对”,在自己电脑上测试了一些例子,暂时没有发现哪里有问题。如有错误,还望能够指正。

推荐阅读