刷题链接:https://www.patest.cn/contests/pat-a-practise
1001
1 #include <iostream> 2 #include <stdio.h> 3 4 using namespace std; 5 int temp[10]; 6 int main() 7 { 8 int a,b,sum,index; 9 while(scanf("%d%d",&a,&b)!=EOF){ 10 sum=a+b; 11 if(sum<0){ 12 printf("-"); 13 sum=-sum; 14 } 15 index=0; 16 17 while(sum>=1000){ 18 temp[index++]=sum%1000; 19 sum=sum/1000; 20 } 21 printf("%d",sum); 22 for(int i = index-1;i >= 0;i--){ 23 if(temp[i]>99) 24 printf(",%d",temp[i]); 25 else if(temp[i]>9) 26 printf(",0%d",temp[i]); 27 else 28 printf(",00%d",temp[i]); 29 } 30 printf(" "); 31 } 32 return 0; 33 }
数据结构初级入门第一题:https://pta.patest.cn/pta/test/17/exam/4/question/260
1 #include <iostream> 2 #include <stdio.h> 3 4 using namespace std; 5 6 int main() 7 { 8 int a,h,ans,i,j,temp;char c; 9 while(scanf("%d %c",&a,&c)!=EOF){ 10 for(h=1;a+1>=2*h*h;h++); 11 if(a==0)h=0,ans=0; 12 else ans=a-2*(h-1)*(h-1)+1; 13 h=(h-2)*2+1; 14 //printf("h is %d and ans is %d ",h,ans); 15 //下面开始输出 16 temp=h; 17 for(i=0;i<h;i++){ 18 if(i<(h+1)/2){ 19 for(j=0;j<i;j++)printf(" "); 20 for(j=0;j<h-i*2;j++)printf("%c",c); 21 printf(" "); 22 }else{ 23 for(j=0;j<h-i-1;j++)printf(" "); 24 for(j=0;j<2*i+2-h;j++)printf("%c",c); 25 printf(" "); 26 } 27 } 28 printf("%d ",ans); 29 } 30 return 0; 31 }
第二题:思路是素数打表法,请注意做表的时候请将空间开到足够大,否则会出现越界错误。同时相对ACM来说PAT的OJ是有bug的,这也就是说明不管题目你是否会写,请得分,很简单的,至少都有分数的,加油。
#include <iostream> #include <stdio.h> using namespace std; #define NMAX 100000 int num[NMAX]; int main() { int i,j; //思路:采用素数打表法对素数进行处理 for(i=0;i < NMAX-1;i++){ num[i]=0; } for(j=2;j < NMAX-1;j++){ if(num[j]==0)for(int k =2*j;k<NMAX-1;k=k+j)num[k]=1; } //上边首先是对表进行初始化 int n,count; while(scanf("%d",&n)!=EOF){ count=0; for(i=2;i<n-1;i++){ if(num[i]==0&&num[i+2]==0)count++; } printf("%d ",count); } return 0; }
第三题:佷常见的一个题目,但是要考虑到特殊的数据集的时候,你会发现你以前不严谨的代码错误百出。还好是PAT对于结果会给你一定的提升,请考虑提高数据集的复杂性,将问题考虑全面
#include <iostream> #include <stdio.h> using namespace std; int num[103]; void reserve(int *,int,int); int main() { int i,n,offset; while(scanf("%d%d",&n,&offset)!=EOF){ if(n==0)continue; offset%=n; for(i=0;i<n;i++)scanf("%d",&num[i]); reserve(num,0,n-offset-1); reserve(num,n-offset,n-1); reserve(num,0,n-1); for(i=0;i<n;i++) if(i!=n-1) printf("%d ",num[i]); else printf("%d",num[i]); printf(" "); } return 0; } void reserve(int *a,int b,int c){ int temp; if(b>=c)return; for(int i=b;i <= b+(c-b)/2;i++){ temp=a[i]; a[i]=a[c-(i-b)]; a[c-(i-b)]=temp; } }
第四题:这个题真的是靠着PAT的提示给整出来的,这个编译器的是好到爆,希望考试要有这样一个效果就好了
这个题目要特别注意!!!进位问题
#include <iostream> #include <stdio.h> #include <string.h> #include <string> using namespace std; #define NMAX 100 char num1[NMAX],num2[NMAX]; int demo1[10],demo2[10]; int main() { int i,j,add,count;bool flag; while(scanf("%s",num1)!=EOF){ flag=true; for(i=0;i<10;i++)demo1[i]=demo2[i]=0; for(i=0;i<strlen(num1);i++)demo1[num1[i]-'0']++; add=count=0; for(i=strlen(num1)-1;i>=0;i--){ j=num1[i]-'0'; j*=2; num2[count++]=(j+add)%10+'0'; add=(j+add)/10; } if(add!=0)num2[count++]=add%10+'0'; num2[count]='