PTA练习题

本文详细介绍了多个C++编程练习题,包括取石子游戏的胜负判断、字符大小写转换、分段函数求值等。通过实例解析输入输出格式,涉及递归、位运算符和条件判断等编程技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

7-2 取石子(二) (10 分)

 7-3 大小写字符转换 (6 分)

 分支结构——大小写字母判断 (5 分)

7-4 冠军魔术 (10 分)

4-2判断闰年 (5 分)

7-6 判断一个三位数是否为水仙花数 (10 分)

7-7 求中间数 (8 分)

7-9 有多少位是7? (8 分) 

7-10 多分支表达-数据奇偶判断 (8 分)

7-12 强迫症 (10 分)

7-13 分段函数求值 (5 分)

7-14 判断10的倍数 (5 分)


 

7-2 取石子(二) (10 分)

Tom 和 Mary 玩取石子的游戏:n 颗石子码成一堆,从 Tom 开始,两人轮流取石子,最少取 1 颗、最多取 2 颗,谁取到最后一颗石子,谁就失败。两个人都极聪明,不会放过任何取胜的机会。请同样聪明的你编写程序,输入石子的数量,输出胜者的名字。

输入格式

石子的数量

输出格式

胜者的名字

输入样例1

1

输出样例1

Mary

输入样例2

2

输出样例2

Tom

经典巴什博弈 给对面留下(2+1)的倍数就能赢

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    if(n%3==1)
    {
         printf("Mary");
    }
    else if (n%3==2)
    {
        printf("Tom");
    }
    else 
    {
        printf("Tom");
    }
}

 7-3 大小写字符转换 (6 分)

输入一个字符,如果是大写字母,将它转换成小写字母并输出;如果是小写字母,将它转换成大写字母并输出;如果都不是,则输出:error

输入样例:

a

输出样例:

A

输入样例:

B

输出样例:

b

输入样例:

1

输出样例:

error

输出字符数字实质上是输出ASCII码对应值

而大小写ASCII码值相差32

#include <stdio.h>
#include <math.h>
#include<stdbool.h>

int main()
{
    char c;
    scanf("%c",&c);
    if(c>=97&&c<=122)
    {
        c=c-32;
        printf("%c",c);
    }
    else if(c>=65&&c<=90)
    {
        c=c+32;
        printf("%c",c);
    }
    else
    {
        printf("error");
    }


    return 0;
}

下面是一道一样的题目

 分支结构——大小写字母判断 (5 分)

键盘输入一个英文字母,如果是大写字母,输出ASCII码,如果是小写字母输出对应的大写字母。(其它情况没有输出)

输入格式:

输入一个英文字母。

输出格式:

根据输入的字母,输出ASCII码或者大写字母

输入样例1:

A

输出样例1:

65

输入样例2:

a

输出样例2:

A
#include<stdio.h>

int main()
{
    int year;
    char a,b,c;
    int t,s;
    scanf("%c",&a);
    if(a>=97&&a<=122)
    {
        printf("%c",a-32);
    }
    if(a>=65&&a<=90)
    {
        printf("%d",a);
    }



return 0;
}

 

7-4 冠军魔术 (10 分)

2018年FISM(世界魔术大会)近景总冠军简纶廷的表演中有一个情节:以桌面上一根带子为界,当他将纸牌从带子的一边推到另一边时,纸牌会变成硬币;

### 关于贪心算法解决找零钱问题 对于给定金额的找零问题,可以采用贪心算法来尝试解决问题。然而,在某些情况下,贪心算法可能无法提供最优解。具体来说,当硬币面额设置合理时(如常见的1分、5分、10分、25分),贪心算法能够有效地找到最少数量的硬币组合;但对于任意设定的硬币面额,则不一定适用。 针对特定条件下的换硬币问题,即每种硬币至少要有一个的情况,直接应用标准的贪心策略并不合适。因为这道题不仅限于最小化使用的硬币总数,还涉及到满足额外约束——确保三种类型的硬币都存在。因此,更合适的解决方案可能是通过遍历所有可能性并筛选符合条件的结果[^1]。 下面是一个Python程序实现的例子,该例子展示了如何处理这个问题: ```python def coin_change(x): solutions = [] for i in range((x - 3) // 5, 0, -1): # 至少一枚五分硬币 for j in range((x - 5 * i - 1) // 2, 0, -1): # 至少一枚二分硬币 k = x - 5 * i - 2 * j # 剩余部分由一分组成 if k >= 1: # 确保至少有一枚一分硬币 total_coins = i + j + k solution_str = f'fen5:{i}, fen2:{j}, fen1:{k}, total:{total_coins}' solutions.append(solution_str) print('\n'.join(solutions)) print(f'count = {len(solutions)}') coin_change(13) ``` 此代码片段实现了上述逻辑,并按照指定格式打印出了所有的可行方案及其对应的硬币总数。注意这里并没有严格遵循贪心原则,而是穷举了所有合法的选择路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值