【自用题目集2】PTA基础编程题目集(自己做的)

原题目链接

编程题

7-1 厘米换算英尺英寸 (15分)
如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。
输入格式: 输入在一行中给出1个正整数,单位是厘米。
输出格式: 在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。

输入样例:
170
输出样例:
5 6

#include

int main()
{
    float cm,inc;
    int foot,inch;

    scanf("%f",&cm);  //用实型读入,方便下面直接在公式中厘米转化成米。如果读取为整型,在下面公式计算中会被吞掉小数点后面的数,产生巨大误差

    inc=((cm/100)/0.3048)*12;  //将厘米通过公式转换成英寸

    foot=inc/12;
    inch=inc-foot*12;  //实型数不能直接取余数,只能通过减去其整数倍来求“余数”

    printf("%d %d",foot,inch);

    return 0;
}

【自用题目集2】PTA基础编程题目集(自己做的)_第1张图片

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

读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,即5点30分表示为530。注意,第二个数字表示的分钟数可能超过60,也可能是负数。
输入格式: 输入在一行中给出2个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即5点30分表示为530;流逝的分钟数可能超过60,也可能是负数。
输出格式: 输出四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。

输入样例:
1120 110
输出样例:
1310

#include

int main()
{
    int hour,min,time1,time2;

    scanf("%d %d",&time1,&time2);

    hour=time1/100;  //为了方便计算,将四位时间转换成小时分钟的形式
    min=time1%100;

    if(time2>=0){    //流逝时间为正数,直接加上去
        if(time2<60){    //流逝时间小于一个小时,直接加到分钟位上
            min=min+time2;
        }
        else{    //流逝时间大于一个小时,换成小时分钟的形式,分别加到小时位和分钟位上
            hour=hour+time2/60;
            min=min+time2%60;
        }
    }
    else{    //流逝时间为负数,为了方便先取绝对值
    time2=-time2;
    if(time2<60){    //流逝时间小于一个小时,直接减到分钟位上
            min=min-time2;
        }
        else{    //流逝时间大于一个小时,换成小时分钟的形式,分别减到小时位和分钟位上
            hour=hour-time2/60;
            min=min-time2%60;
        }
    }

    if(min>=60){    //分钟位进位
        min=min-60;
        hour++;
    }
    if(min<0){    //分钟位退位
        min=60+min;
        hour--;
    }

    time1=hour*100+min;  //最后将小时分钟的形式转换回四位时间的形式

    printf("%d",time1);

    return 0;
}

【自用题目集2】PTA基础编程题目集(自己做的)_第2张图片

7-3 逆序的三位数 (10分)
程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
输入格式: 每个测试是一个3位的正整数。
输出格式: 输出按位逆序的数。

输入样例:
123
输出样例:
321

#include

int main()
{
    int n,i;
    int a[3]={0};

    scanf("%d",&n);

    i=0;
    while(n){    //求出该数的各数位的数字
        a[i]=n%10;
        n=n/10;
        i++;
    }

    for(i=0;i<3;i++){    //逆序数
        n=n*10+a[i];
    }

    printf("%d",n);
    return 0;
}

【自用题目集2】PTA基础编程题目集(自己做的)_第3张图片

7-4 BCD解密 (10分)
BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!

现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。
输入格式: 输入在一行中给出一个[0, 153]范围内的正整数,保证能转换回有效的BCD数,也就是说这个整数转换成十六进制时不会出现A-F的数字。
输出格式: 输出对应的十进制数。

输入样例:
18
输出样例:
12

#include

int main()
{
    int BCD;
    int uni,dec;  //个位,十位

    scanf("%d",&BCD);

    uni=BCD%16;  //十六进制转十进制
    dec=BCD/16;

    BCD=dec*10+uni;
    printf("%d",BCD);

    return 0;
}

【自用题目集2】PTA基础编程题目集(自己做的)_第4张图片

7-5 表格输出 (5分)
本题要求编写程序,按照规定格式输出表格。
输入格式: 本题目没有输入。
输出格式: 要求严格按照给出的格式输出下列表格:
【自用题目集2】PTA基础编程题目集(自己做的)_第5张图片

#include

int main()
{
    printf("------------------------------------\n");
    printf("Province      Area(km2)   Pop.(10K)\n");

    printf("------------------------------------\n");
    printf("Anhui         139600.00   6461.00\n");
    printf("Beijing        16410.54   1180.70\n");
    printf("Chongqing      82400.00   3144.23\n");
    printf("Shanghai        6340.50   1360.26\n");
    printf("Zhejiang      101800.00   4894.00\n");
    
    printf("------------------------------------\n");

    return 0;
}

【自用题目集2】PTA基础编程题目集(自己做的)_第6张图片

7-6 混合类型数据格式化输入 (5分)
本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。
输入格式: 输入在一行中顺序给出浮点数1、整数、字符、浮点数2,其间以1个空格分隔。
输出格式: 在一行中按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。

输入样例:
2.12 88 c 4.7
输出样例:
c 88 2.12 4.70

#include

int main()
{
    float f1,f2;
    int I;
    char C;

    scanf("%f %d %c %f",&f1,&I,&C,&f2);
    
    printf("%c %d %.2f %.2f",C,I,f1,f2);

    return 0;
}

测试结果

7-7 12-24小时制 (15分)
编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。
输入格式: 输入在一行中给出带有中间的:符号(半角的冒号)的24小时制的时间,如12:34表示12点34分。当小时或分钟数小于10时,均没有前导的零,如5:6表示5点零6分。
提示: 在scanf的格式字符串中加入:,让scanf来处理这个冒号。
输出格式: 在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串AM或表示下午的字符串PM。如5:6 PM表示下午5点零6分。注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的12:00就是12小时制的12:0 PM;而0点被认为是第二天的时间,所以是0:0 AM。

输入样例:
21:11
输出样例:
9:11 PM

#include

int main()
{
    int hour,min;
    int ret=1;
    char col;

    scanf("%d%c%d",&hour,&col,&min);  //冒号直接以字符串形式读入

    if(hour>12){    //判断上下午时间,如果下午的时间需要进行调整
        hour=hour-12;
        ret=0;
    }
    if(hour==12){    //中午12点做单独判断处理
        ret=0;
    }

    if(ret){    //
        printf("%d%c%d AM",hour,col,min);
    }
    else{
        printf("%d%c%d PM",hour,col,min);
    }
    return 0;

}

【自用题目集2】PTA基础编程题目集(自己做的)_第7张图片

7-8 超速判断 (10分)
模拟交通警察的雷达测速仪。输入汽车速度,如果速度超出60 mph,则显示“Speeding”,否则显示“OK”。
输入格式: 输入在一行中给出1个不超过500的非负整数,即雷达测到的车速。
输出格式: 在一行中输出测速仪显示结果,格式为:Speed: V - S,其中V是车速,S或者是Speeding、或者是OK。

输入样例1:
40
输出样例1:
Speed: 40 - OK

输入样例2:
75
输出样例2:
Speed: 75 - Speeding

#include

int main()
{
	int v;
	
	scanf("%d",&v);
	
	if(v>60){
        printf("Speed: %d - Speeding",v);
    }
    else{
        printf("Speed: %d - OK",v);
    }
    
	return 0;
}

【自用题目集2】PTA基础编程题目集(自己做的)_第8张图片

7-9 用天平找小球 (10分)
三个球A、B、C,大小形状相同且其中有一个球与其他球重量不同。要求找出这个不一样的球。
输入格式: 输入在一行中给出3个正整数,顺序对应球A、B、C的重量。
输出格式: 在一行中输出唯一的那个不一样的球。

输入样例:
1 1 2
输出样例:
C

#include

int main()
{
    int a,b,c;
    int key=0;
    char ch[3]={'A','B','C'};

    scanf("%d %d %d",&a,&b,&c);

    if(a==b){
        key=2;
    }
    else{
        if(a==c){
            key=1;
        }
        else{
            key=0;
        }
    }

    printf("%c",ch[key]);

    return 0;
}

【自用题目集2】PTA基础编程题目集(自己做的)_第9张图片

7-10 计算工资 (15分)
某公司员工的工资计算方法如下:一周内工作时间不超过40小时,按正常工作时间计酬;超出40小时的工作时间部分,按正常工作时间报酬的1.5倍计酬。员工按进公司时间分为新职工和老职工,进公司不少于5年的员工为老职工,5年以下的为新职工。新职工的正常工资为30元/小时,老职工的正常工资为50元/小时。请按该计酬方式计算员工的工资。
输入格式: 输入在一行中给出2个正整数,分别为某员工入职年数和周工作时间,其间以空格分隔。
输出格式: 在一行输出该员工的周薪,精确到小数点后2位。

输入样例1:
5 40
输出样例1:
2000.00

输入样例2:
3 50
输出样例2:
1650.00

#include

int main()
{
    int year;
    float hour,money=0.0;  //周薪要初始化

    scanf("%d %f",&year,&hour);

    if(year<5){    //判断是新员工还是老员工
        if(hour<40){
            money=hour*30;
        }
        else{
            money=1200+(hour-40)*30*1.5;
        }
    }
    else{
        if(hour<40){
            money=hour*50;
        }
        else{
            money=2000+(hour-40)*50*1.5;
        }
    }

    printf("%.2f",money);

    return 0;
}

【自用题目集2】PTA基础编程题目集(自己做的)_第10张图片

7-11 分段计算居民水费 (10分)
为鼓励居民节约用水,自来水公司采取按用水量阶梯式计价的办法,居民应交水费y(元)与月用水量x(吨)相关:当x不超过15吨时,y=4x/3;超过后,y=2.5x−17.5。请编写程序实现水费的计算。
输入格式: 输入在一行中给出非负实数x。
输出格式: 在一行输出应交的水费,精确到小数点后2位。

输入样例1:
12
输出样例1:
16.00

输入样例2:
16
输出样例2:
22.50

#include

int main()
{
    float x,y=0.0;

    scanf("%f",&x);

    if(x>15){    //对用水量进行判断
        y=2.5*x-17.5;
    }
    else{
        y=4*x/3;
    }

    printf("%.2f",y);

    return 0;
}

【自用题目集2】PTA基础编程题目集(自己做的)_第11张图片

7-12 两个数的简单计算器 (10分)
本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。
输入格式: 输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零。
输出格式: 当运算符为+、-、*、/、%时,在一行输出相应的运算结果。若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出ERROR。

输入样例1:
-7 / 2
输出样例1:
-3

输入样例2:
3 & 6
输出样例2:
ERROR

#include

int main()
{
    int x,y,z;
    int ret=0;
    char c;

    scanf("%d %c %d",&x,&c,&y);

    switch(c)    //对运算符进行判断
    {
        case '+':z=x+y; break;
        case '-':z=x-y; break;
        case '*':z=x*y; break;
        case '/':z=x/y; break;
        case '%':z=x%y; break;

        default:ret=1; break;
    }

    if(ret){
        printf("ERROR");
    }
    else{
        printf("%d",z);
    }
    return 0;
}

【自用题目集2】PTA基础编程题目集(自己做的)_第12张图片

7-13 日K蜡烛图 (15分)
股票价格涨跌趋势,常用蜡烛图技术中的K线图来表示,分为按日的日K线、按周的周K线、按月的月K线等。以日K线为例,每天股票价格从开盘到收盘走完一天,对应一根蜡烛小图,要表示四个价格:开盘价格Open(早上刚刚开始开盘买卖成交的第1笔价格)、收盘价格Close(下午收盘时最后一笔成交的价格)、中间的最高价High和最低价Low。
如果CloseOpen,表示为“R-Hollow”(即“空心红蜡烛”);如果Open等于Close,则为“R-Cross”(即“十字红蜡烛”)。如果Low比Open和Close低,称为“Lower Shadow”(即“有下影线”),如果High比Open和Close高,称为“Upper Shadow”(即“有上影线”)。请编程序,根据给定的四个价格组合,判断当日的蜡烛是一根什么样的蜡烛。
输入格式: 输入在一行中给出4个正实数,分别对应Open、High、Low、Close,其间以空格分隔。
输出格式: 在一行中输出日K蜡烛的类型。如果有上、下影线,则在类型后加上with 影线类型。如果两种影线都有,则输出with Lower Shadow and Upper Shadow。

输入样例1:
5.110 5.250 5.100 5.105
输出样例1:
BW-Solid with Lower Shadow and Upper Shadow

输入样例2:
5.110 5.110 5.110 5.110
输出样例2:
R-Cross

输入样例3:
5.110 5.125 5.112 5.126
输出样例3:
R-Hollow

#include

int main()
{
    float Open,High,Low,Close;

    scanf("%f %f %f %f",&Open,&High,&Low,&Close);

    if(Open==Close){    //先判断open与close的关系
        printf("R-Cross");
    }
    else{
        if(Open<Close){
            printf("R-Hollow");
        }
        else{
            printf("BW-Solid");
        }
    }

//判断low、high与open、cloes的关系
    if( ( (Low<Open)&&(Low<Close) ) && ( (High>Open)&&(High>Close) ) ){
        printf(" with Lower Shadow and Upper Shadow");
    }    //最先判断高的都高、低的都低的情况
    else{
        if( (Low<Open)&&(Low<Close) ){    //只有low低的情况
            printf(" with Lower Shadow");
        }
        if( (High>Open)&&(High>Close) ){    //只有high高的情况
            printf(" with Upper Shadow");
        }
    }

    return 0;
}

【自用题目集2】PTA基础编程题目集(自己做的)_第13张图片

7-14 求整数段和 (15分)
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
输入格式: 输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。
输出格式: 首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。

输入样例:
-3 8
输出样例:
【自用题目集2】PTA基础编程题目集(自己做的)_第14张图片

#include

int main()
{
    int A,B,i;
    int X=0,sum=0;

    scanf("%d %d",&A,&B);

    for(i=A;i<=B;i++){
        printf("%5d",i);    //输出每一行的五个数字
        sum++;

        if(sum==5) {    //如果正好是第五个数字,换下一行
            printf("\n");
            sum=0;}

        X=X+i;    //计算所有数字之和
    }

    if(sum!=0) printf("\n");
    //判断最后一个输出的数字是否是该行的最后一个,如果不是要手动换行
    
    printf("Sum = %d",X);
    return 0;
}

【自用题目集2】PTA基础编程题目集(自己做的)_第15张图片

7-15 计算圆周率 (15分) 【可改进】
根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。
在这里插入图片描述
输入格式: 输入在一行中给出小于1的阈值。
输出格式: 在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。

输入样例:
0.01
输出样例:
3.132157

#include

float PI(int n);
double f=1.0;

int main()
{
    float pi1,pi2,x,P;
    int i;
    int ret=1;

    scanf("%f",&x);

    pi1=1;
    i=2;
    do{
        pi2=pi1+PI(i++);
        P=pi2-pi1;
        if(P<x){
            ret=0;
        }
        else{
            pi1=pi2;
        }
    }while(ret);

    printf("%.6f",2*pi2);

    return 0;
}

float PI(int n){
    f=f*(n-1)/(2*n-1);
    return f;
}

【自用题目集2】PTA基础编程题目集(自己做的)_第16张图片

7-16 求符合给定条件的整数集 (15分)
给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。
输入格式: 输入在一行中给出A。
输出格式: 输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。

输入样例:
2
输出样例:
234 235 243 245 253 254
324 325 342 345 352 354
423 425 432 435 452 453
523 524 532 534 542 543

#include

int main()
{
    int n,i,j,k,s;

    scanf("%d",&n);

    for(i=n;i<n+4;i++){
        s=0;  //初试清零

        for(j=n;j<n+4;j++){

            if(j!=i){    //第一个数和第二个数不能重复
                for(k=n;k<n+4;k++){

                    if( (k!=i)&&(k!=j) ){    //第三个数不能与第一个第二个数重复
                        printf("%d%d%d",i,j,k);
                        s++;
                        if(s<6) printf(" ");  //判断是否需要输出空格
                    }
                }
            }
        }

        printf("\n");  //一层循环完要进行换行
    }

    return 0;
}

【自用题目集2】PTA基础编程题目集(自己做的)_第17张图片

7-19 支票面额 (15分)
一个采购员去银行兑换一张y元f分的支票,结果出纳员错给了f元y分。采购员用去了n分之后才发觉有错,于是清点了余额尚有2y元2f分,问该支票面额是多少?
输入格式: 输入在一行中给出小于100的正整数n。
输出格式: 在一行中按格式y.f输出该支票的原始面额。如果无解,则输出No Solution。

输入样例1:
23
输出样例1:
25.51

输入样例2:
22
输出样例2:
No Solution

#include

int main()
{
    int y=0,f=0,n;
    int ret=1;

    scanf("%d",&n);

    for(f=1;f<100;f++){
        while(y<f){
        //通过题目得出的关系式,如果关系式成立则有解,输出并跳出循环
            if( (98*f-199*y)==n ){
                printf("%d.%d",y,f);
                ret=0;
                break;
            }
            y++;
        }
        y=0;
    }

    if(ret){
        printf("No Solution");
    }

    return 0;
}

【自用题目集2】PTA基础编程题目集(自己做的)_第18张图片

7-22 龟兔赛跑 (20分)
乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?
输入格式: 输入在一行中给出比赛时间T(分钟)。
输出格式: 在一行中输出比赛的结果:乌龟赢输出@@,兔子赢输出_,平局则输出--;后跟1空格,再输出胜利者跑完的距离。

输入样例:
242
输出样例:
@_@ 726

#include

int main()
{
    int time,rabbit,tortoise;

    rabbit=0;  //初始化兔子乌龟跑过的距离
    tortoise=0;

    scanf("%d",&time);

    while(time>0){
        if(rabbit>tortoise){    //如果兔子跑在乌龟前面停下来休息
            if(time>=30){
                tortoise=tortoise+3*30;
            }
            else{
                tortoise=tortoise+3*time;
            }
        time=time-30;
        }
        else{    //如果乌龟超过兔子,兔子继续跑
            if(time>=10){
                rabbit=rabbit+9*10;
                tortoise=tortoise+3*10;
            }
            else{
                rabbit=rabbit+9*time;
                tortoise=tortoise+3*time;
            }
        time=time-10;
        }
    }

    if(rabbit==tortoise){    //兔子乌龟距离相等
        printf("-_- %d",rabbit);
    }
    else{
        if(tortoise>rabbit){    //乌龟在兔子前面
            printf("@_@ %d",tortoise);
        }
        else{    //兔子在乌龟前面
            printf("^_^ %d",rabbit);
        }
    }

    return 0;
}

【自用题目集2】PTA基础编程题目集(自己做的)_第19张图片

7-25 念数字 (15分)
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:
0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu
输入格式: 输入在一行中给出一个整数,如:1234。
提示:整数包括负数、零和正数。
输出格式: 在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如 yi er san si。

输入样例:
-600
输出样例:
fu liu ling ling

#include

void print(char N);  //数字打印函数

int main()
{
    char c[10]={0};
    //由于不清楚输入的数有几位,为了防止溢出,以字符形式读入,并且初始化字符数组
    int i;

    scanf("%s",&c);

    i=0;
    if(c[0]=='-'){    //判断是否为负数
        printf("fu ");
        i++;
    }

    while(c[i]!=0){    //对一个个数字进行打印
        print(c[i]);
        i++;
        if(c[i]!=0){
            printf(" ");
        }
    }

    return 0;
}

void print(char N){
    switch(N){
        case '0':  printf("ling"); break;
        case '1':  printf("yi"); break;
        case '2':  printf("er"); break;
        case '3':  printf("san"); break;
        case '4':  printf("si"); break;
        case '5':  printf("wu"); break;
        case '6':  printf("liu"); break;
        case '7':  printf("qi"); break;
        case '8':  printf("ba"); break;
        case '9':  printf("jiu"); break;
    }
}

【自用题目集2】PTA基础编程题目集(自己做的)_第20张图片

你可能感兴趣的:(错题整理)