hdu 1015 Safecracker 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1015
题目说是从一个字符串中找到5个数 v w x y z 给定target (子母中 A=1 ,B=2,C=3。。。Z=26)
v - w^2 + x^3 - y^4 + z^5 = target
题目中有一个要求:找到的vwxyz字符串按照字典序从大到小输出 又没看题 使用枚举的方法 5层循环 先对字符串从大到小排序 这样保证找到的第一个就是字典序最大的
没有优化 5层循环直接过 简单的题因为没看懂题改了半天TT。。。哎 英语和理解能力急需加强。。。
题目不难 代码如下:
1 #include<iostream>
2 #include<string>
3 #include<cstring>
4 #include<algorithm>
5 using namespace std;
6 char ans[6];
7 bool cmp(const char &a,const char &b)
8 {
9 return a>=b;
10 }
11 bool find(int targat, char a[])
12 {
13 int i1,i2,i3,i4,i5;
14 int m1,m2,m3,m4,m5;
15 for(i1=0;i1<strlen(a);i1++)
16 {
17 for(i2=0;i2<strlen(a);i2++)
18 {
19 if(a[i2]==a[i1])
20 continue;
21 else
22 {
23 for(i3=0;i3<strlen(a);i3++)
24 {
25 if(a[i3]==a[i2] ||a[i3]==a[i1])
26 continue;
27 else
28 {
29 for(i4=0;i4<strlen(a);i4++)
30 {
31 if(a[i4]==a[i3]|| a[i4]==a[i2] ||a[i4]==a[i1])
32 continue;
33 else
34 {
35 for(i5=0;i5<strlen(a);i5++)
36 {
37 if(a[i5]==a[i4] || a[i5]==a[i4] ||a[i5]==a[i3]||a[i5]==a[i2] ||a[i5]==a[i1])
38 continue;
39 else
40 {
41 m1=a[i1]+1-'A';
42 m2=a[i2]+1-'A';
43 m3=a[i3]+1-'A';
44 m4=a[i4]+1-'A';
45 m5=a[i5]+1-'A';
46 if(m1-m2*m2+m3*m3*m3-m4*m4*m4*m4+m5*m5*m5*m5*m5==targat)
47 {
48 ans[0]=a[i1];
49 ans[1]=a[i2];
50 ans[2]=a[i3];
51 ans[3]=a[i4];
52 ans[4]=a[i5];
53 ans[5]='\0';
54 return 1;
55 }
56 }
57 }
58 }
59 }
60 }
61 }
62 }
63 }
64
65 }
66 return 0;
67 }
68 int main()
69 {
70 int targat;
71 int i1,i2,i3,i4,i5;
72 ans[5]='\0';
73
74 char str[200];
75 while(cin>>targat>>str)
76 {
77
78 if(targat==0 )
79 {
80 if(strcmp(str,"END")==0)
81 {
82
83 break;
84 }
85 }
86 sort(str,str+strlen(str),cmp);
87 if( find(targat,str))
88 cout<<ans<<endl;
89 else
90 cout<<"no solution"<<endl;
91
92
93 }
94 //system("pause");
95 return 0;
96 }