• PTA程序辅助实验平台——2023年软件设计综合实践_3(分支与循环)


    第一题:7-1 印第安男孩 - C/C++ 分支与循环

    朵拉编程的时候也想顺便练习英语。她编程从键盘读入一个整数n,如果n值为0或者1,向屏幕输出“0 indian boy.”或“1 indian boy.”;如果n大于1,比如9,则输出“9 indian boys.”。请你也编一个这样的程序。

    输入格式:

    整数n

    输出格式:

    见题干描述

    输入样例:

    9
    

    输出样例:

    9 indian boys.
    1. #include
    2. using namespace std;
    3. int n;
    4. int main() {
    5. cin >> n;
    6. if (n == 0) cout << "0 indian boy.";
    7. else if (n == 1) cout << "1 indian boy.";
    8. else if(n>1) cout << n << " indian boys.";
    9. return 0;
    10. }

     

    第二题7-2 3,5,7的倍数 - C/C++ 分支与循环

    编程序实现功能:输入一个整数,判断其是否能同时被3、5、7整除。能被整除则输出“Yes”,否则, 输出“No”。

    输入格式:

    一个整数

    输出格式:

    Yes 或 No

    输入样例:

    7
    

    输出样例:

    No
    1. #include
    2. using namespace std;
    3. int n;
    4. int main() {
    5. cin>>n;
    6. if (!(n % 3))
    7. if (!(n % 5))
    8. if (!(n % 7))
    9. cout << "Yes";
    10. else cout << "No";
    11. else cout << "No";
    12. else cout << "No";
    13. return 0;
    14. }

     

    7-3 超速罚款 - C/C++ 分支与循环

    开车超速是要罚款的,某国相应法律如下:

    情况处罚
    车速 ≤ 限速程序输出:Not Speeding
    超速比 ≤ 10%程序输出:Speeding Warning
    10% <超速比≤ 20%程序输出:Fine 100
    20% <超速比≤ 50%程序输出:Fine 500
    50% <超速比≤ 100%程序输出:Fine 1000
    超速比 > 100%程序输出:Fine 2000

    请编写程序,程序从输入的第1行读取车速(整数),从输入的第2行读取限速值(整数),然后使用条件分支语句进行判断,输出如表所示的处罚结论。

    输入格式:

    车速
    限速值

    输出格式:

    如表所示的处罚结论

    输入样例:

    1. 149
    2. 100

    输出样例:

    Fine 500
    1. #include
    2. using namespace std;
    3. int v, limit;
    4. int main() {
    5. cin >> v >> limit;
    6. if (v <= limit)
    7. cout << "Not Speeding";
    8. else if (v <= limit * 1.1)
    9. cout << "Speeding Warning";
    10. else if (v <= limit * 1.2)
    11. cout << "Fine 100";
    12. else if (v <= limit * 1.5)
    13. cout << "Fine 500";
    14. else if (v <= limit * 2)
    15. cout << "Fine 1000";
    16. else
    17. cout << "Fine 2000";
    18. return 0;
    19. }

     7-4 象限判定 - C/C++ 分支与循环

    请编程实现下述功能:

    • 从键盘读入不为零的两个坐标值(浮点数);注意两个坐标值应使用英文逗号分隔;
    • 结合上图,判定点(x,y)所在的象限。
      说明:程序约定x和y值不为0

    image.png

    输入格式:

    x,y

    输出格式:

    quadrant 1/2/3/4

    输入样例:

    15.2,-11.3
    

    输出样例:

    quadrant 4
    1. #include
    2. using namespace std;
    3. double x, y;
    4. char a;
    5. int main() {
    6. cin>>x>>a>>y;
    7. if (x > 0)
    8. if (y > 0)
    9. cout << "quadrant 1";
    10. else
    11. cout << "quadrant 4";
    12. else if (y > 0)
    13. cout << "quadrant 2";
    14. else
    15. cout << "quadrant 3";
    16. return 0;
    17. }

     7-5 三天打渔、两天晒网 - C/C++ 分支与循环

    郭、王两位大侠同上终南山习武,两人最初的战力值均为100。王大侠骨骼清奇,天赋较高,每练功一天,战力增加2‰,郭大侠比较愚笨,每练功一天,战力增加1‰。如果休假一天不练,两人的战力均减少1‰。相较于王大侠,郭大侠更加勤奋,日日练功,从不休息,而王大侠,则三天打渔,两天晒网,也就是每5天的前三天练功,后两天休假。

    请编写程序,计算N天之后,郭大侠和王大侠战力分别是多少?

    输入格式:

    整数N

    输出格式:

    郭的战力值,王的战力值

    说明:均保留1位小数,以英文逗号分隔

    输入样例:

    5
    

    输出样例:

    100.5,100.4
    1. #include
    2. using namespace std;
    3. int n;
    4. double g = 100, w = 100;
    5. int main() {
    6. cin >> n;
    7. g = g*pow(1.001, n);
    8. if (n >= 5) {
    9. int d;
    10. d = n / 5;
    11. double p;
    12. p=pow(1.002, 3) * pow(0.999, 2);
    13. w = w * pow(p, d);
    14. }
    15. if (n % 5 <= 3) {
    16. w = w * pow(1.002, n % 5);
    17. }
    18. else {
    19. w = w * pow(1.002, n % 5);
    20. w = w * 0.999;
    21. }
    22. cout << fixed << setprecision(1);
    23. cout << g << "," << w;
    24. return 0;
    25. }

     

     7-6 "验证"哥德巴赫猜想 - C/C++ 分支与循环

    数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。请设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。

    输入格式:

    在一行中给出一个(2,2 000 000 000]范围内的偶数N。

    输出格式:

    在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。

    输入样例:

    18
    

    输出样例:

    18 = 5 + 13
    1. #include
    2. using namespace std;
    3. long long int n;
    4. bool prime(int a) {
    5. for (int i = 2; i < sqrt(a); i++) {
    6. if (a % i==0) return 0;
    7. }
    8. return 1;
    9. }
    10. int main() {
    11. cin >> n;
    12. for (int i = 2; i <= n / 2; i++) {
    13. if (prime(i)&& prime(n - i))
    14. {
    15. cout << n << " = " << i << " + " << n - i;
    16. break;
    17. }
    18. }
    19. return 0;
    20. }

    7-7 考拉慈猜想 - C/C++ 分支与循环

    考拉兹猜想(Collatz conjecture)又称奇偶归一猜想,是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2。
    如此循环,最终都能得到1。编写一个程序,输入一个正整数,打印其考拉兹序列。

    输入格式:

    1个>1的正整数

    输出格式:

    以逗号分隔的考拉兹序列。

    输入样例:

    5
    

    输出样例:

    16,8,4,2,1
    1. #include
    2. using namespace std;
    3. int n;
    4. int main() {
    5. cin >> n;
    6. while (n != 1) {
    7. if (n % 2 == 1) {
    8. n = n * 3 + 1;
    9. cout << n << ",";
    10. }
    11. else if (n == 2) {
    12. n = n / 2;
    13. cout << 1;
    14. }
    15. else {
    16. n = n / 2;
    17. cout << n << ",";
    18. }
    19. }
    20. return 0;
    21. }

    7-8 N个数求和 

    本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

    输入格式:

    输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1 a2/b2 ...给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

    输出格式:

    输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。

    输入样例1:

    1. 5
    2. 2/5 4/15 1/30 -2/60 8/3

    输出样例1:

    3 1/3
    

    输入样例2:

    1. 2
    2. 4/3 2/3

    输出样例2:

    2
    

    输入样例3:

    1. 3
    2. 1/3 -1/6 1/8

    输出样例3:

    7/24

     

    1. #include
    2. #define ll long long
    3. /*求最大公约数*/
    4. ll gcd(ll a,ll b){
    5. if(b==0)return a;
    6. return gcd(b,a%b);
    7. }
    8. /*求最小公倍数*/
    9. ll lcm(ll a,ll b){
    10. return a*b/gcd(a,b);
    11. }
    12. /*分子分母进行约分*/
    13. void yuefen(ll &a,ll &b){
    14. ll gcdNum=gcd(a,b);
    15. if(gcdNum!=0){
    16. a=a/gcdNum;
    17. b=b/gcdNum;
    18. }
    19. }
    20. int main(){
    21. int n;
    22. ll a1,b1,a2,b2;
    23. scanf("%d",&n);
    24. scanf("%lld/%lld",&a1,&b1);
    25. yuefen(a1,b1);
    26. int i=1;
    27. while(i
    28. scanf("%lld/%lld",&a2,&b2);
    29. ll lcmNum=lcm(b1,b2);
    30. a1=a1*lcmNum/b1+a2*lcmNum/b2;//分子进行相加
    31. b1=lcmNum;
    32. yuefen(a1,b1);//约分化简
    33. i++;
    34. }
    35. //整数为0且a1!=0 如1/2
    36. if(a1&&a1/b1==0){
    37. printf("%lld/%lld\n",a1,b1);
    38. }else if(a1%b1==0){//如2/2
    39. printf("%lld\n",a1/b1);
    40. }else {//如3/2
    41. printf("%lld %lld/%lld\n",a1/b1,a1%b1,b1);
    42. }
    43. return 0;
    44. }

    7-9 均是素数

    在给定的区间 [m,n] 内,是否存在素数 p、q、r(p

    输入格式:

    输入给出区间的两个端点 0

    输出格式:

    在一行中输出满足条件的素数三元组的个数。

    输入样例:

    1 35
    

    输出样例:

    10
    

    样例解读

    满足条件的 10 组解为:

    1. 2, 3, 5
    2. 2, 3, 7
    3. 2, 3, 13
    4. 2, 3, 17
    5. 2, 5, 7
    6. 2, 5, 13
    7. 2, 5, 19
    8. 2, 5, 31
    9. 2, 7, 23
    10. 2, 13, 17
    1. #include
    2. #include
    3. int sushu(int i) //求素数函数
    4. {
    5. int flag1=0;
    6. if(i>=2)
    7. {
    8. for(int j=2;j<=sqrt(i);j++)
    9. {
    10. if(i%j==0)
    11. {
    12. flag1=1;
    13. break;
    14. }
    15. }
    16. }
    17. else
    18. return 1;
    19. return flag1;
    20. }
    21. int main()
    22. {
    23. int n,m,i,j,t,a[10000],flag1=0,k=0,count=0;
    24. scanf("%d %d",&n,&m);
    25. for(i=n;i<=m;i++)
    26. {
    27. flag1=sushu(i);
    28. if(flag1==0)
    29. {
    30. a[k]=i;
    31. k++;
    32. }
    33. }
    34. for(i=0;i<=k;i++)
    35. {
    36. for(j=i;j<=k;j++)
    37. {
    38. for(t=j;t<=k;t++)
    39. {
    40. if((sushu(a[i]*a[j]+a[t])==0)&&(sushu(a[j]*a[t]+a[i])==0)&&(sushu(a[t]*a[i]+a[j])==0))
    41. count++;
    42. }
    43. }
    44. }
    45. printf("%d",count);
    46. return 0;
    47. }

     

     7-10 机工士姆斯塔迪奥

    在 MMORPG《最终幻想14》的副本“乐欲之所瓯博讷修道院”里,BOSS 机工士姆斯塔迪奥将会接受玩家的挑战。

    你需要处理这个副本其中的一个机制:N×M 大小的地图被拆分为了 N×M 个 1×1 的格子,BOSS 会选择若干行或/及若干列释放技能,玩家不能站在释放技能的方格上,否则就会被击中而失败。

    给定 BOSS 所有释放技能的行或列信息,请你计算出最后有多少个格子是安全的。

    输入格式:

    输入第一行是三个整数 N,M,Q (1≤N×M≤105,0≤Q≤1000),表示地图为 N 行 M 列大小以及选择的行/列数量。

    接下来 Q 行,每行两个数 Ti​,Ci​,其中 Ti​=0 表示 BOSS 选择的是一整行,Ti​=1 表示选择的是一整列,Ci​ 为选择的行号/列号。行和列的编号均从 1 开始。

    输出格式:

    输出一个数,表示安全格子的数量。

    输入样例:

    1. 5 5 3
    2. 0 2
    3. 0 4
    4. 1 3

    输出样例:

    12
    1. #include
    2. int flagr[100001]={0},flagc[100001]={0};
    3. int main(){
    4. int n,m,q,Ti,Ci,r=0,c=0;
    5. scanf("%d%d%d",&n,&m,&q);
    6. while(q--){
    7. scanf("%d%d",&Ti,&Ci);
    8. if(Ti==0&&flagr[Ci]||Ti==1&&flagc[Ci])
    9. continue; //如果是之前被攻击的行或者列就直接跳过
    10. if(Ti==0){
    11. r++;
    12. flagr[Ci]=1;
    13. }
    14. else{
    15. c++; //标记已经被攻击过了
    16. flagc[Ci]=1;
    17. }
    18. }
    19. printf("%d",m*n-r*m-c*n+r*c);
    20. }

     

  • 相关阅读:
    EasyCVR视频调阅页面如何正确关闭正在播放的视频?
    【数据结构】二叉树链式存储及遍历
    【面试专线】【基础知识】【JAVA】基础(二)
    HTML+CSS简单漫画网页设计成品 蜡笔小新3页 大学生个人HTML网页制作作品
    GO协程理解和应用场景
    hive 如何优雅的将小表扩容十倍。
    路由器ARP和ARP-proxy(华为)
    spring boot @Configuration和@Componment的区别
    政策东风,助推万亿智能家居产业,2022各地智能家居政策大盘点
    libcef.dll文件丢失怎么办?丢失对电脑有什么影响?
  • 原文地址:https://blog.csdn.net/qq_65628600/article/details/133363171