【蓝桥杯】“萌新首秀”全国高校新生编程排位赛3
一、下一次生日
题目
题目分析
闰年,四年一次,今年是闰年,那下一个闰年就是四年后
代码
1 2 3 4 5 6 7 | #include using namespace std; int main() { cout<< "2028" ; return 0; } |
二、遗失的数字
题目
题目分析
用一个数组来记录数组A[N]出现的数字,如果出现过就记录该数组对应的数字为true,否则为flase
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #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
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #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枚硬币
题目
题目分析
1.完成金额存放与去重处理
1 | unordered_set< int > amounts; |
2.分成三种情况计算金额,一枚金币、两枚金币、三枚金币......
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #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时,先手最优可以拿完所有饮料,而对手只能拿水
注意,这里是双方可以从任意一边拿走饮料,而不是只能选择一边
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #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; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验