杭电 1015 Safecracker
来源:互联网 发布:中国自由意志缺乏数据 编辑:程序博客网 时间:2024/06/05 06:51
一开始看这道题时发现这么多英文,一大堆字母数字,以为这道题很难。把题目看完以后发现就是一系列数字找满足条件的等式。本来打算用枚举法,但是根据做了这么多道题的经验。心里就直接否定了。想着这要直接循环做,要有5个循环,最后肯定超时。想了很久也没有一个头绪。然后网上找了一下发现还真是直接枚举的方法做,所以就顺着开始的思路往下写了如下代码
#include <iostream> #include <cstring> #include <algorithm> using namespace std;int main(){ int tar; char s[20], b[6]; int a[20],flag; while (cin >> tar>> s && tar) { int length = strlen(s); flag = 1; for (int i = 0; i < length; i++) { a[i] = s[i] - 'A' + 1; } for (int i = 0; i < length; i++) for (int j = 0; j < length; j++) if (j != i) for (int k = 0; k < length; k++) if ( k != j && k != i) for (int l = 0; l < length; l++) if (l != k && l != j && l != i) for (int m = 0; m < length; m++) { if(m != l && m != k && m != j && m != i && a[i] - a[j] * a[j] + a[k] * a[k] * a[k] - a[l] * a[l] * a[l] * a[l] + a[m] * a[m] * a[m] * a[m] * a[m] == tar) { flag = 0; b[0] = a[i] - 1 + 'A'; b[1] = a[j] - 1 + 'A'; b[2] = a[k] - 1 + 'A'; b[3] = a[l] - 1 + 'A'; b[4] = a[m] - 1 + 'A'; } } if (flag) cout << "no solution" << endl; else cout << b << endl; } return 0;}
代入验证的数据集发现出现了乱码,最后发现字符串尾部应该有个’\0’作为字符串结尾标志,所以申请空间应该多申请一个。所以加了一行b[5]=’\0’;最后发现可以运行了。以为这一题就做完了,然后提交,发现竟然错了。一直找不到是啥原因。认真看了题目以后发现它只要最大的一组数据。所以加入了一个排序的功能。最后得到代码如下
#include <iostream> #include <cstring> #include <algorithm> using namespace std;int main(){ int tar; char s[20], b[6]; int a[20],flag; while (cin >> tar>> s && tar) { int length = strlen(s); flag = 1; for (int i = 0; i < length; i++) { a[i] = s[i] - 'A' + 1; } sort(a, a + length); for (int i = 0; i < length; i++) for (int j = 0; j < length; j++) if (j != i) for (int k = 0; k < length; k++) if ( k != j && k != i) for (int l = 0; l < length; l++) if (l != k && l != j && l != i) for (int m = 0; m < length; m++) { if (m != l && m != k && m != j && m != i && a[i] - a[j] * a[j] + a[k] * a[k] * a[k] - a[l] * a[l] * a[l] * a[l] + a[m] * a[m] * a[m] * a[m] * a[m] == tar) { flag = 0; b[0] = a[i] - 1 + 'A'; b[1] = a[j] - 1 + 'A'; b[2] = a[k] - 1 + 'A'; b[3] = a[l] - 1 + 'A'; b[4] = a[m] - 1 + 'A'; b[5] = '\0'; } } if (flag) cout << "no solution" << endl; else cout << b << endl; } return 0;}
这样最后结果就通过了。
阅读全文
0 0
- 杭电 1015 Safecracker
- 杭电 1015 Safecracker
- 杭电 1015 Safecracker
- 杭电1015 Safecracker 暴力
- 杭电 ACM 1015 --Safecracker
- 杭电OJ 1015 Safecracker
- 杭电-1015Safecracker(DFS)
- 杭电 HDU ACM 1015 Safecracker (dfs 枚举排列)
- 杭电1796 Safecracker(DFS)
- 杭电ACM1015——Safecracker
- 杭电1015——Safecracker(dfs、递归枚举排列)
- 杭电ACM OJ 1015 Safecracker 优雅的5重for循环轻松解决v
- 1015 Safecracker
- HDU - 1015 Safecracker
- HDOJ 1015 Safecracker
- HDU 1015 Safecracker
- HDU 1015 Safecracker
- Hdu 1015 Safecracker
- Leetcode——第88题
- codecademy SQL 编程系列三Create && Insert , Select
- Java作业杨枝10.28/10.29
- 对Servlet的理解
- Day01_Java作业
- 杭电 1015 Safecracker
- NOIP模拟(10.30)T1 比赛
- uc/Os3的学习
- 2017-10-30
- LeetCode.205 Isomorphic Strings
- 九周 项目1 二叉树算法库
- unixODBC安装配置
- 美国的中东政策
- 10.30