马上要找工作了,锻炼下自己的写程序能力,不多说,上代码
1 /********************杭电acm 1015 已AC 2 在这个程序里,使用穷举法来实现,但是输出顺序需要安装字典的最大 3 来输出 4 1,在升序排序时,可以直接使用sort这个函数,也可以自己写.. 5 在自己写的程序里面要注意下标的越界问题 6 ***********************************/ 7 8 #include "iostream" 9 10 11 using namespace std; 12 13 #define Max 20 14 int main(void) 15 { 16 int target; 17 int len; 18 int temp=0; 19 int mark=0; 20 char letters[Max]; 21 int flag[5]={0}; 22 int nu[Max]; 23 cin>>target; 24 while(target) 25 { 26 for(int f=0;f<5;f++) 27 flag[f]=0; 28 mark=0; 29 cin>>letters; 30 len=strlen(letters); 31 if((target==0)&&(!strcmp(letters,"END"))) 32 break; 33 for(int i=0;i<len;i++) 34 nu[i]=letters[i]-'A'+1; 35 //将所有的都排好顺序,这样才能保证枚举出来的一组是按字典最大的一组 36 for(i=0;i<len;i++) 37 { 38 for(int t=1;t<len-i;t++)//注意这里排序的时候t=1,不然可能会下标越界 39 {if(nu[t-1]>nu[t]) 40 { 41 int tt=nu[t]; 42 nu[t]=nu[t-1]; 43 nu[t-1]=tt; 44 char ss=letters[t]; 45 letters[t]=letters[t-1]; 46 letters[t-1]=ss; 47 } 48 } 49 } 50 //for(int t=0;t<len;t++) 51 // cout<<nu[t]<<" "; 52 //cout<<endl; 53 54 for(i=0;i<len;i++) 55 { 56 for(int j=0;j<len;j++) 57 { 58 for(int m=0;m<len;m++) 59 { 60 for(int n=0;n<len;n++) 61 { 62 for(int s=0;s<len;s++) 63 { 64 if(i!=j&&i!=m&&i!=n&&i!=s&&j!=m&&j!=n&&j!=s&&m!=n&&m!=s&&n!=s) 65 {temp=nu[i]-nu[j]*nu[j]+nu[m]*nu[m]*nu[m]-nu[n]*nu[n]*nu[n]*nu[n]+nu[s]*nu[s]*nu[s]*nu[s]*nu[s]; 66 if(target==temp) 67 { 68 69 70 flag[0]=i;flag[1]=j;flag[2]=m;flag[3]=n;flag[4]=s; 71 mark=1; 72 73 // goto Out; 74 } 75 } 76 77 } 78 } 79 } 80 } 81 } 82 //Out: 83 if(mark==0) 84 cout<<"no solution"<<endl; 85 else 86 cout<<letters[flag[0]]<<letters[flag[1]]<<letters[flag[2]]<<letters[flag[3]]<<letters[flag[4]]<<endl; 87 cin>>target; 88 89 } 90 91 return 0; 92 93 }
这个题目直接使用暴力穷举法可以解决,估计是系统的数据弱了.....