鸿 网 互 联 www.68idc.cn

当前位置 : 主页 > 编程语言开发 > c++ > >

Party Games UVA

来源:互联网 作者:佚名 时间:2017-09-08 09:44
题目 1 #includeiostream 2 #include string 3 #includealgorithm 4 using namespace std; 5 // 生成字符串 6 /* 7 求出排序后位于中间的两个字符串较小的和较大的分别为s1,s2 8 s[i]表示字符串s的第i位 9 对于第1位,显然只需要考虑两个值:s1[1],s1[1]+1 1

题目

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 using namespace std;
 5 //生成字符串
 6 /*
 7 求出排序后位于中间的两个字符串较小的和较大的分别为s1,s2
 8 s[i]表示字符串s的第i位
 9 对于第1位,显然只需要考虑两个值:s1[1],s1[1]+1
10 如果单独一位两种方式不能满足,则考虑2位的情况
11 显然,如果需要考虑第2位,那么第1位应该取s1[1]
12 对于第i位,如果s1[i]和s2[i]都存在,只要类比以上方法即可
13 如果s1.length>s2.length
14 试验可得用一般的方法即可
15 如果s1.length<s2.length
16 如果计算到s1.length位仍未得出结果,那么答案就是s1
17 */
18 //曾经出过的bug:忽略了s1[i]+1超出了字母范围(A到Z)的情况,此时应舍去
19 string s[1000];
20 string t1,t2,s1,s2;
21 int n;
22 int main()
23 {
24     int i;
25     cin>>n;
26     while(n!=0)
27     {
28         t1="";t2="";
29         for(i=0;i<n;i++)
30             cin>>s[i];
31         sort(s,s+n);
32         s1=s[(n/2)-1];
33         s2=s[n/2];
34         for(i=0;i<s1.length();i++)
35         {
36             t2=t1+s1[i];
37             if(t2>=s1&&t2<s2)
38             {
39                 cout<<t2<<'\n';
40                 goto haha;
41             }
42             if(s1[i]+1<='Z')
43             {
44                 t2=t1+(char)(s1[i]+1);
45                 if(t2>=s1&&t2<s2)
46                 {
47                     cout<<t2<<'\n';
48                     goto haha;
49                 }
50             }
51             t1+=s1[i];
52         }
53         if(s1.length()<s2.length())
54         {
55             cout<<s1<<'\n';
56         }
57         haha:
58         cin>>n;
59     }
60     return 0;
61 }

 

网友评论
<