【蓝桥杯】“萌新首秀”全国高校新生编程排位赛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枚硬币

题目

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;
}

  

 

posted @   山远尽成云  阅读(167)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
点击右上角即可分享
微信分享提示