杭电acm 1015题

马上要找工作了,锻炼下自己的写程序能力,不多说,上代码

 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 }

这个题目直接使用暴力穷举法可以解决,估计是系统的数据弱了.....

posted on 2014-04-11 13:13  笑侃码农  阅读(441)  评论(0编辑  收藏  举报