【PAT甲级】1048 Find Coins (25 分) C++ 全部AC
生活随笔
收集整理的這篇文章主要介紹了
【PAT甲级】1048 Find Coins (25 分) C++ 全部AC
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
給你一個sum,以及擁有的錢
讓你找出一個組合,正好用兩張錢付清sum,注意如果有多個結果,輸出其中最小的
這道題注意稍微優化一下算法,要不然卡在測試點3,4
我是用二重循環過了的,只要注意輸入的時候去重一下數據,然后在計算的時候進行合理的剪枝,并不會超時。
題解 C++
#include<iostream> #include<algorithm> #include<vector> using namespace std; vector<int> coin; int coins[1000] = { 0 };//用于去重 int cmp(int a1, int a2) {//小到大return a1 < a2; } int main() {int totalCoin;int sum;cin >> totalCoin >> sum;//擁有的硬幣for (int i = 0; i < totalCoin; i++) {int t;cin >> t;if (coins[t] > 2) {//數據去重,否則3、4測試點超時continue;}else {coin.push_back(t);coins[t]++;}}//排序sort(coin.begin(), coin.end(), cmp);//求和for (int i = 0; i < totalCoin; i++) {for (int j = i + 1; j < totalCoin; j++) {if (coin[i] + coin[j] == sum) {cout << coin[i] << " " << coin[j];return 0;}else if (coin[i] + coin[j] > sum) {break;}}if (coin[i] * 2 > sum) {break;}}cout << "No Solution";system("pause"); }總結
以上是生活随笔為你收集整理的【PAT甲级】1048 Find Coins (25 分) C++ 全部AC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【PAT甲级 删除字符串中重复字母】10
- 下一篇: 【PAT甲级】1037 Magic Co