PTA程序设计类辅助教学平台--2023年软件设计综合实践_1(变量与数据类型)

注意:本文章在PTA平台上选择编译语言时,除了第九题,第十题选择C++(g++)以外,其余均选择C(clang)。

第一题 7-1 种钻石

2019年10月29日,中央电视台专题报道,中国科学院在培育钻石领域,取得科技突破。科学家们用金刚石的籽晶片作为种子,利用甲烷气体在能量作用下形成碳的等离子体,慢慢地沉积到钻石种子上,一周“种”出了一颗 1 克拉大小的钻石。

本题给出钻石的需求量和人工培育钻石的速度,请你计算出货需要的时间。

输入格式:

输入在一行中给出钻石的需求量 N(不超过 107 的正整数,以微克拉为单位)和人工培育钻石的速度 v(1≤v≤200,以微克拉/天为单位的整数)。

输出格式:

在一行中输出培育 N 微克拉钻石需要的整数天数。不到一天的时间不算在内。

输入样例:

102000 130

输出样例:

784
#include<stdio.h>
int main()
{   int a,b,c;
    scanf("%d %d",&a,&b);
    c=a/b;
    printf("%d",c);
    return 0;
}

第二题 7-2 然后是几点

有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。

读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。

输入格式:

输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530;0 点 30 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。

输出格式:

输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。

输入样例:

1120 110

输出样例:

1310
#include<stdio.h>
int main()
{
    int a,b,c,d;
    scanf("%d%d",&a,&d);
    b=a/100;
    c=a-b*100;
    int h=b*60+c+d;
    printf("%d%02d",h/60,h%60);
    return 0;
    
}

 第三题7-3 冠军魔术

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

这里我们假设纸牌会变成等量的硬币,而硬币变成纸牌时,纸牌的数量会加倍。那么给定纸牌的初始数量,当他来回推了 N 次(来/回各算一次)后,手里拿的是纸牌还是硬币?数量是多少?

输入格式:

输入在一行里给出两个正整数,分别是纸牌的初始数量和魔术师推送的次数。这里假设初始状态下魔术师手里全是纸牌。

输出格式:

如果最后魔术师手里是纸牌,输出 0 和纸牌数量;如果是硬币,则输出 1 和硬币数量。数字间须有 1 个空格。题目保证结果数值不超出整型范围(即 231−1)。

输入样例 1:

3 7

输出样例 1:

1 24

输入样例 2:

8 4

输出样例 2:

0 32
#include<stdio.h>
#include<math.h>
int main()
{
    int a,b,c,o,e;
    o=0;
    e=1;
    scanf("%d %d",&a,&b);
    
    c=b;
    
    if(b%2)
    {
        b=(b-1)/2;
    }
    else b=b/2;
    while(b>0)
    {
        a=a*2;
        b--;
    }
    if(c%2)
        printf("%d %d",e,a);
    else  printf("%d %d",o,a);
    return 0;
}

 第四题7-4 考试周

考试周快到了,浙江大学的电子屏又调皮了…… 本题请你帮小编写一个自动倒计时的程序,对给定的日期(例如“腊八”就对应 8)和倒计时天数(例如电子屏上的“四天之后”就对应 4),自动调整公式里的分母(例如 8/2=4 里面的那个 2)。

输入格式:

输入在一行中给出两个正整数:A 是给定的日期,不超过 30;B 是倒计时天数,不超过 10。

输出格式:

在一行中输出公式 A/X=B,其中 X 是满足等式的数字,输出时保留小数点后 1 位即可。

输入样例:

8 3

输出样例:

8/2.7=3
#include<stdio.h>
int main()
{
    int a,b;
    float c;
    scanf("%d %d",&a,&b);
    c=1.0*a/b;
    printf("%d/%.1f=%d",a,c,b);
    return 0;
}

 

 第五题 7-5 英文字母替换加密(大小写转换+后移1位)

 

本题要求编写程序,将英文字母替换加密。为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。变换规则是:将明文中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母。例如,字母a->B、b->C、…、z->A、A->b、B->c、…、Z->a。输入一行字符,将其中的英文字母按照以上规则转换后输出,其他字符按原样输出。

输入格式:

输入一行字符,以回车符 '\n'作为 结束符。

输出格式:

将输入的一行字符中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母后输出,其他字符按原样输出。

输入样例:

在这里给出一组输入。例如:

Reold  Z123?

输出样例:

在这里给出相应的输出。例如:

sFPME  a123?
#include<stdio.h>
int main()
{
    char ch;
    ch=getchar();
    while(ch!='\n')
    {
        if(ch>='A'&&ch<'Z')
        {
            ch=ch+32+1;
            
        }
        else if(ch=='Z')
        {
         ch='a';
            
        }
        else if(ch>='a'&&ch<'z')
        {
            ch=ch-32+1;
            
        }
        else if(ch=='z')
        {
            ch='A';
            
        }
        putchar(ch);
        ch=getchar();
    }
    return 0;
}

 第六题7-6 整数算术运算

本题要求编写程序,计算并输出2个正整数的和、差、积、商与余数。题目保证输入和输出全部在整型范围内。

输入格式:

输入在一行中给出2个正整数A和B。

输出格式:

在5行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商与余数。

输入样例:

5 3

输出样例:

在这里给出相应的输出。例如:

5 + 3 = 8
5 - 3 = 2
5 * 3 = 15
5 / 3 = 1
5 % 3 = 2
#include<stdio.h>
int main()
{   
    int a,b,c,d,e,f,h;
    
    scanf("%d %d",&a,&b);
    c=a+b;
    d=a-b;
    e=a*b;
    f=a/b;
    h=a%b;
    printf("%d + %d = %d\n",a,b,c);
    printf("%d - %d = %d\n",a,b,d);
    printf("%d * %d = %d\n",a,b,e);
    printf("%d / %d = %d\n",a,b,f);
    printf("%d %% %d = %d",a,b,h);
    
    return 0;
}

第七题7-7 火车相遇 - C/C++ 变量及简单数据类型

2-1(火车相遇)甲列火车长150米,速度为15米/秒;乙列火车长200米,速度为12米/秒。两列火车相向而行,从车头相遇开始至两车车尾分离,共需要多少时间?请编程求解,输出结果保留两位小数,以秒为单位。

image.png

输入格式:

本题无输入

输出格式:

x.yz seconds.

输入样例:

 

输出样例:

12.96 seconds.

提示:在C/C++里,整数/整数的结果为整数,为了保证计算结果的精度,在当前的知识背景下,建议全部变量均采用浮点数。

#include<stdio.h>
int main()
{
    printf("12.96 seconds.");
    return 0;
}

 

第八题7-8 英文字母 - C/C++ 变量及简单数据类型

在计算机内部,英文字母依ASCII码分别由连续的整数来表示。比如,大写的英文字母A的ASCII码值为65,B的码值为66,然后依次递增,Z的码值为90。

请编程计算:

从键盘读取大写字母Q(代号,其值由具体输入确定),请问Q所代表的大写字母是字母表中的第几个字母(从1开始计数,即A为第1个字母)?
从键盘读取整数N,求字母表中的第N个字母(从1开始计数)是什么?

输入格式:

Q
N

说明:是一个字符的大写字母;N的取值范围为1~26。

输出格式:

请参考输出样例。

输入样例:

B
3

输出样例:

2
C

提示:C/C++语言获取用户输入的方法请参考教科书后续章节。

 

#include<stdio.h>
int main()
{
    char Q,H;
    int  N,a;
    scanf("%c",&Q);
    scanf("%d",&N);
    a=Q-'A'+1;
    H='A'+N-1;
    printf("%d\n",a);
    printf("%c\n",H);
    return 0;
    }

第九题7-9 猴子吃桃 - C/C++ 变量及简单数据类型

一只猴子在树上摘了若干个桃,当即吃了x%,觉得不过瘾,又多吃了一个;第二天它吃了剩下桃子的x%加一个;第三天它又吃了剩下桃子的x%加一个,此时,只剩下一个桃子。请编程求解:猴子第一天从树上摘得多少个桃子?

【解题提示】

1). 使用倒推法,第3天剩余桃数为1;

2). 猴子吐出了最后吃的那个桃,1+1=2,2即为第3天吃桃前全部桃数的(100-x)%,由此推导出第3天吃桃前的桃数;

3). 同理,第3天吃桃前的桃数加1,再除以(100-x)%,即为第2天吃桃前的桃数。

4). 同理,第2天的桃数加1,再除以(100-x)%,即为第1天摘得的桃数。

输入格式:

x

说明:x为整数且其值可确保第1天的桃数为整数。

输出格式:

猴子第1天摘得y个桃.

说明:y是整数。

输入样例:

50

输出样例:

The monkey taken 22 peaches at the first day.
#include<iostream>
using namespace std;

int main(){
    int x,t1,t2,t3;
    cin>>x;
    t3=(1+1)/((100-x)*0.01);
    t2=(t3+1)/((100-x)*0.01);
    t1=(t2+1)/((100-x)*0.01);
    cout<<"The monkey taken "<<t1<<" peaches at the first day.";

    
    return 0;
}

 第十题 7-10 游客检票 - C/C++ 变量及简单数据类型

题目描述
假设张家界景区的游客抵达检票口的速度是恒定的。某国庆长假日清晨景区开门时检票口已积聚了一定数量的游客,且随时间流逝,不断有新的游客抵达。如果打开8个检票口,m分钟刚好可以完成全部游客的检票放行;如果使用6个检票口,则需要n (n>m)分钟才能完成。请编程计算:如果使用10个检票口,需要多少时间才能将景区入口的待检票人数清零?

【分析】

这是小学奥数中著名的“牛吃草”问题。现假设每个检票口每分钟可以完成1份游客的检票放行任务。设景区开门时积聚的游客数量为x份,设每分钟有y份游客抵达检票口。然后列出方程组,根据方程组求解x,y。

然后,设使用10个检票口时,需要z分钟清零,根据x,y列方程,求出z。

输入格式:

m
n

说明:m,n为整数且n>m,且该输入确保问题有解。

输出格式:

原有排队游客份数:A, 每分钟新到游客份数:B, 10口同开需C分钟清零待检票游客.

说明:A, B, C均为保留1位小数的浮点数。

输入样例:

180
300

输出样例:

Original number of visitors: 900.0
New arriavlas per minute: 3.0
Check time when 10 gates are opened: 128.6

注意:从数学角度上看,900.0, 30.0均为份数,不是游客人数。

 

#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
    int m, n;
    cin >> m >> n;
    float x, y, z;
    if (n > m)
    {
        y = (6.0*n - 8.0*m) / (n - m);
        x = 2.0*m*n / (n - m);
        z = x / (10.0 - y);
    }
    cout << "Original number of visitors: " << fixed << setprecision(1) << x << endl;
    cout << "New arriavlas per minute: " << fixed << setprecision(1) << y << endl;
    cout << "Check time when 10 gates are opened: " << fixed << setprecision(1) << z << endl;
    return 0;
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值