一、下一次生日
題目
下一次生日
題目分析
閏年,四年一次,今年是閏年,那下一個閏年就是四年後
程式碼
#include using namespace std; int main() { cout<< "2028" ; return 0; }
二、遺失的數字
題目
遺失的數字
題目分析
用一個陣列來記錄陣列A[N]出現的數字,如果出現過就記錄該陣列對應的數字為true,否則為flase
程式碼
#include #include #include using namespace std; int main() { int n; cin >> n; vector< int > a(n); vector< bool > p(n + 1, false ); for ( int i = 0; i < n; i++) { cin >> a[i]; } for ( int i = 0; i < n; i++) { if (a[i] >= 1 && a[i] <= n) //判斷是否符合該範圍,可以省略 { p[a[i]] = true ; } } for ( int i = 1; i <= n; i++) { if (!p[i]) //遍歷,尋找沒有出現在陣列的最小整數 { cout << i << endl; return 0; } } cout << n + 1; return 0; }
三、超級手機號
題目
超級手機號
題目分析
1.把手機號當成字串輸入
2.判斷後面字元是否等於第一個字元,如果後面的字元全部等於第一個字元,返回true,否則,返回false
程式碼
#include using namespace std; bool isz( string num) { char base = num[0]; for ( int i = 1; i < num.size(); i++) { if (num[i] != base ) { return false ; } } return true ; } int main() { int n, count = 0; cin >> n; for ( int i = 0; i < n; i++) { string num; cin >> num; if (isz(num)) { count++; } } cout << count; return 0; }
四、3枚硬幣
題目
3枚硬幣
題目分析
1.完成金額存放與去重處理
unordered_set<int> amounts;
2.分成三種情況計算金額,一枚金幣、兩枚金幣、三枚金幣......
程式碼
#include <iostream> #include <vector> #include <unordered_set> using namespace std; int main() { int n; cin >> n; vector<int> coins(n); for (int i = 0; i < n; i++) { cin >> coins[i]; } unordered_set<int> amounts; // 使用一個迴圈來選擇硬幣的數量(0個、1個、2個或3個) for (int numCoins = 0; numCoins <= 3; numCoins++) { if (numCoins == 1) { for (int coin : coins) //遍歷coins { amounts.insert(coin); } } else if (numCoins == 2) { for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { amounts.insert(coins[i] + coins[j]); } } } else if (numCoins == 3) { for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { for (int k = j + 1; k < n; k++) { amounts.insert(coins[i] + coins[j] + coins[k]); } } } } } cout << amounts.size()+1 << endl;//加上金額為0的情況 return 0; }
五、運動飲料和礦泉水
題目
運動飲料和礦泉水
題目分析
一個腦筋急轉彎,各位可以去找規律,然後會發現:
1.奇數n時,先手最優只能拿到一瓶運動飲料,即第一杯,後面無論怎麼拿,都只能拿到水,對手則會拿到運動飲料
2.偶數n時,先手最優可以拿完所有飲料,而對手只能拿水
注意,這裡是雙方可以從任意一邊拿走飲料,而不是隻能選擇一邊
程式碼
#include <iostream> using namespace std; int main() { int n; cin >> n; int maxcount = 0;//當前玩家能夠獲得的最多運動飲料數量 if (n % 2 == 1)//奇數回合 { maxcount = 1; cout << maxcount; return 0; } else { maxcount = n / 2; cout << maxcount; return 0; } return 0; }