#include<iostream> #include<string> #include<algorithm> using namespace std; //生成字符串 /* 求出排序后位于中间的两个字符串较小的和较大的分别为s1,s2 s[i]表示字符串s的第i位 对于第1位,显然只需要考虑两个值:s1[1],s1[1]+1 如果单独一位两种方式不能满足,则考虑2位的情况 显然,如果需要考虑第2位,那么第1位应该取s1[1] 对于第i位,如果s1[i]和s2[i]都存在,只要类比以上方法即可 如果s1.length>s2.length 试验可得用一般的方法即可 如果s1.length<s2.length 如果计算到s1.length位仍未得出结果,那么答案就是s1 */ //曾经出过的bug:忽略了s1[i]+1超出了字母范围(A到Z)的情况,此时应舍去 string s[1000]; string t1,t2,s1,s2; int n; int main() { int i; cin>>n; while(n!=0) { t1="";t2=""; for(i=0;i<n;i++) cin>>s[i]; sort(s,s+n); s1=s[(n/2)-1]; s2=s[n/2]; for(i=0;i<s1.length();i++) { t2=t1+s1[i]; if(t2>=s1&&t2<s2) { cout<<t2<<‘\n‘; goto haha; } if(s1[i]+1<=‘Z‘) { t2=t1+(char)(s1[i]+1); if(t2>=s1&&t2<s2) { cout<<t2<<‘\n‘; goto haha; } } t1+=s1[i]; } if(s1.length()<s2.length()) { cout<<s1<<‘\n‘; } haha: cin>>n; } return 0; }
时间: 2024-10-09 23:32:23