pta题目练习题(三)下 - 实践
L1-017 到底有多二
分数 15
一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。
输入格式:
输入第一行给出一个不超过50位的整数N。
输出格式:
在一行中输出N犯二的程度,保留小数点后两位。
输入样例:
-13142223336
输出样例:
81.82%
解题方法:
本题是一个字符串题,其实15分的题,如果题目没有写计算,它应该都是字符串题。
一,使用string数组,储存输入。
char n[MAX];scanf("%s",n);
二,判断负数与偶数。
注意n是字符串,在计算偶数时,要注意类型的转换。
int is_negative = 0; // 是否负数int is_even = 0; // 是否偶数//标记负数if(n[0]=='-'){is_negative=1;size=size-1;}//标记偶数if((n[strlen(n)-1]-'0')%2==0){is_even=1;}
三,计算数字数与2的数量。
使用strlen我们可以直接得到数字数,对于2的数量循环判断就好。
int size=strlen(n); // 总位数
//统计位数和数字2的个数int frist=0;if(is_negative==1){frist=1;}for(int i=frist;i
四,完整代码:
#include
#include
#define MAX 100
int main(){char n[MAX];scanf("%s",n);int size=strlen(n); // 总位数int count_two = 0; // 数字2的个数int is_negative = 0; // 是否负数int is_even = 0; // 是否偶数//标记负数if(n[0]=='-'){is_negative=1;size=size-1;}//标记偶数if((n[strlen(n)-1]-'0')%2==0){is_even=1;}//统计位数和数字2的个数int frist=0;if(is_negative==1){frist=1;}for(int i=frist;i
L1-018 大笨钟
分数 10
微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律,所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点数;如果过了整点,就敲下一个整点数。另外,虽然一天有24小时,钟却是只在后半天敲1~12下。例如在23:00敲钟,就是“当当当当当当当当当当当”,而到了23:01就会是“当当当当当当当当当当当当”。在午夜00:00到中午12:00期间(端点时间包括在内),笨钟是不敲的。
下面就请你写个程序,根据当前时间替大笨钟敲钟。
输入格式:
输入第一行按照hh:mm的格式给出当前时间。其中hh是小时,在00到23之间;mm是分钟,在00到59之间。
输出格式:
根据当前时间替大笨钟敲钟,即在一行中输出相应数量个Dang。如果不是敲钟期,则输出:
Only hh:mm. Too early to Dang.
其中hh:mm是输入的时间。
输入样例1:
19:05
输出样例1:
DangDangDangDangDangDangDangDang
输入样例2:
07:05
输出样例2:
Only 07:05. Too early to Dang.
解题方法
字符串题,注意类型转换。
#include
#include
#define MAX 100
int main(){char time[MAX];scanf("%s",&time);int hh,mm;hh=(time[0]-'0')*10+(time[1]-'0');mm=(time[3]-'0')*10+(time[4]-'0');if(mm>0){hh=hh+1;}// printf("%d\n",hh);if(hh>=0&&hh<=12){printf("Only %s. Too early to Dang.",time);}else{hh=hh-12;for(int i=0;i
L1-019 谁先倒
分数 15
划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。
下面给出甲、乙两人的酒量(最多能喝多少杯不倒)和划拳记录,请你判断两个人谁先倒。
输入格式:
输入第一行先后给出甲、乙两人的酒量(不超过100的非负整数),以空格分隔。下一行给出一个正整数N(≤100),随后N行,每行给出一轮划拳的记录,格式为:
甲喊 甲划 乙喊 乙划
其中喊是喊出的数字,划是划出的数字,均为不超过100的正整数(两只手一起划)。
输出格式:
在第一行中输出先倒下的那个人:A代表甲,B代表乙。第二行中输出没倒的那个人喝了多少杯。题目保证有一个人倒下。注意程序处理到有人倒下就终止,后面的数据不必处理。
输入样例:
1 1
6
8 10 9 12
5 10 5 10
3 8 5 12
12 18 1 13
4 16 12 15
15 1 1 16
输出样例:
A
1
解题方法:
#include
struct fgg{int a_han;int a_huo;int b_han;int b_huo;
};
int rps(int a_1,int a_2,int b_1,int b_2){int sum=a_1+b_1;int tmp=0;if(a_2==sum&&b_2!=sum){tmp=1;}else if(a_2!=sum&&b_2==sum){tmp=2;}return tmp;
}
int main(){int a,b;struct fgg f;scanf("%d %d",&a,&b);//a,b是酒量(最多能喝多少杯不倒),实际可以喝的酒是加一。a=a+1;b=b+1;int A,B;A=a;B=b;int n;scanf("%d",&n);for(int i=0;i < n && a > 0 && b > 0;i++){scanf("%d %d %d %d",&f.a_han,&f.a_huo,&f.b_han,&f.b_huo);int tmp;tmp=rps(f.a_han,f.a_huo,f.b_han,f.b_huo);if(tmp==1){a--;}else if(tmp==2){b--;}}if(a==0){printf("A\n");printf("%d\n",B-b);}else if(b==0){printf("B\n");printf("%d\n",A-a);}return 0;
}