PAT(Basic Level) Practice (中文)试题源码及心得(1001~1003)
2019-02-13 16:25
190 查看
新年新气象,新年新开始
2019.2.13,距离考研发布成绩还有两天,希望会有好的结果哈。今天开始练习pat乙级试题,每天一更博客,督促自己练习,这个是试题的链接PAT(Basic Level) Practice (中文),希望大家多多指正,互相学习!NEVER GIVE UP!
1001 #害死人不偿命的(3n+1)猜想#
1001这道题就比较简单啦,这个猜想就是所有的数经过运算后都会变成1,所以问题是需要几步才会变成1。我用的是递归算法,代码如下:
#include <iostream> using namespace std; void Callatz(int n,int i) { if(n==1) cout<< i; else if(n%2==0){ i++; Callatz(n/2,i); } else{ i++; Callatz((3*n+1)/2,i); } } int main() { int n,i=0; cin>>n; Callatz(n,i); return 0; }
1002 #写出这个数#
这道题也是比较简单的,只是我的算法写的比较绕,哈哈。
(1)把输入的数看成是一个个字符,然后一个个存入数组中,每存入一个字符,就减去48变成数字与sum做加法,当getchar得到的字符为空时,得到sum的值。
(2)判断sum的值是否是一位,如果是一位则代码和不是一位的代码有点小区别。把sum的值从百位到个位用switch语句判断是多少,然后相应的输出对应的英文。代码如下:
#include <stdio.h> #include<string.h> #include <stdlib.h> void shuchu(int sum,int temp) { if (sum % 10 != sum) { shuchu((sum - (sum % 10)) / 10,temp); if (sum != temp) { switch (sum % 10) { 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; } } else { switch (sum % 10) { 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; } } } if (sum % 10 == sum) { switch (sum) { 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; } } } void shuchu2(int sum, int temp) { switch (sum % 10) { 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; } } int main(int argc, char *argv[]) { char data[100] = {0}; int sum = 0,temp = 0; for (int i=0; i < 100 && (data[i] = getchar()) != '\n';i++) { sum = sum + data[i]-48; } temp = sum; if (sum > 9) { shuchu(sum, temp); } else { shuchu2(sum, temp); } system ("pause"); return 0; }
1003#我要通过!#
这道题首先要读明白题,我就是开始没读明白题只能对5个测试点,剩下两个测试点。“如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 A 组成的字符串。”,就是这句话要反复读明白。aPbATca ,这里a、 b、 c是指字符串,a和a要一样…例如,(AA)P(A)T(AAA)是正确的,那么(AA)P(A)AT(AAA)(AA)是正确的,那么[AA]P[AA]AT[AAAAA][AA]也是正确的,那么等等…这点比较有趣,也是需要注意的!
#include<stdio.h> #include<string.h> int reta(char *str) { int k=0,a=0; for(k=0;str[k]!='\0';k++) { if(str[k]!='P' && str[k]!='A' && str[k]!='T') return -1; } a=strspn(str,"A"); if(str[a]=='P') return a; else return -1; } int retb(char *str,int a) { int b=0; char *p; p=str+a+1; b=strspn(p,"A"); if(p[b]=='T') return b; else return -1; } int retc(char *str,int a,int b) { int c=0; char *p; p=str+a+b+2; c=strspn(p,"A"); if(p[c]=='\0') return c; else return -1; } int main(int argc, char *argv[]) { int n=0,i=0,j=0,a=0,b=0,c=0,r[10]={0}; char str[10][100]; scanf("%d",&n); for(i=0;i<n && i<10;i++) scanf("%s",str[i]); for(i=0;i<n && i<10;i++) { a=reta(str[i]); if(a!=-1) b=retb(str[i],a); else continue; if(b!=-1) c=retc(str[i],a,b); else continue; if(b>0 && c==b*a) r[i]=1; } for(i=0;i<n && i<10;i++) { if(r[i]==0) printf("NO\n"); else printf("YES\n"); } return 0; }
相关文章推荐
- PAT(Basic Level) Practice (中文)试题源码及心得(1004~1006)
- PAT(Basic Level) Practice (中文)试题源码及心得(1007~1008)
- PAT (Basic Level) Practice (中文)1001 害死人不偿命的(3n+1)猜想 (15 分)
- PAT 乙级 (Basic Level) Practice (中文)1003
- PAT (Basic Level) Practice (中文)1001 害死人不偿命的(3n+1)猜想
- PAT (Basic Level) Practice (中文)-1003
- PAT (Basic Level) Practice (中文)1003 我要通过!
- 浙江大学PAT (Basic Level) Practice (中文)1001(3n+1)猜想-1002写出这个数JAVA实现代码
- 浙江大学PAT (Basic Level) Practice (中文)1003我要通过!JAVA代码实现及其规律分析
- PAT (Basic Level) Practice (中文)1004 成绩排名
- PAT 乙级 (Basic Level) Practice (中文)1047
- PAT 乙级 (Basic Level) Practice (中文)1050
- PAT 乙级 (Basic Level) Practice (中文)1057
- PAT (Basic Level) Practise (中文)- 1001. 害死人不偿命的(3n+1)猜想 (15)
- PAT (Basic Level) Practice (中文)-1004
- PAT (Basic Level) Practice (中文)1009 说反话
- PAT (Basic Level) Practice (中文)1060 爱丁顿数(C语言)
- PAT (Basic Level) Practice (中文)1063 计算谱半径(C语言)
- PAT (Basic Level) Practice (中文)1066 图像过滤(C语言)
- PAT (Basic Level) Practice (中文)1077 互评成绩计算(C语言)