-
题目大意:在一堆硬币中找出两枚面值之和为所需价格的硬币。
-
思路:
- 将所有硬币存入hash table
- 判断hash table中是否存在 i和 m - i(注意:若i == m - 1且 hashTable[i] == 1,表示该面值的硬币只出现过一次,跳过这种情况。)
- 若满足条件,就输出j, m - j。(因为i是从小到大的,所以第一个i和m-i就是我要的值)
-
代码:
#include <iostream> using namespace std; int hashtable[1005]; // 设为500会出现段错误 int main() { int n , m, a; scanf("%d %d", &n, &m); for(int i = 0; i < n; i++){ scanf("%d", &a); hashtable[a]++; } for(int j = 1; j < m; j++){ if(hashtable[j] && hashtable[m - j]){ if(j == m - j && hashtable[j] == 1) continue; // 硬币只出现一次 printf("%d %d", j, m - j); // 因为i是从小到大的,所以第一个i和m-i就是我要的值 return 0; } } printf("No Solution"); return 0; }
-
总结:
- 查找一串数字里是否存在某个数的问题一般用hash
- hash table一般要设置大一点
- 注意输入输出格式!!!
【PAT】1048 Find Coins (25 分)
最新推荐文章于 2021-11-24 22:05:47 发布