【蓝桥杯】“萌新首秀”全国高校新生编程排位赛3
一、下一次生日
题目


题目分析
闰年,四年一次,今年是闰年,那下一个闰年就是四年后
代码
#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枚硬币
题目


题目分析
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;
}

浙公网安备 33010602011771号