# ltx_zero

::  ::  ::  ::  ::
 PAT B1001害死人不偿命的(3n+1) 猜想 #include int main() { int n,countnum=0; scanf("%d",&n); while(n!=1) { if(n%2==0) { n=n/2; } else { n=(3*n+1)/2; } countnum++; } printf("%d",countnum); return 0; } View Code  PAT B1032 挖掘机技术哪家强 #include #include #include using namespace std; int main() { int n; int a,b,maxnum=0; int score[100005]; scanf("%d",&n); memset(score,0,sizeof(score)); for(int i=1;i<=n;i++) { scanf("%d %d",&a,&b); score[a]+=b; if(score[a]>score[maxnum]) maxnum=a; } printf("%d %d",maxnum,score[maxnum]); return 0; } View Code  PAT B1036 跟奥巴马一起编程 注意行数是(num+1)/2 #include using namespace std; int main() { int num; char c; scanf("%d %c",&num,&c); for(int i=1;i<=(num+1)/2;i++) { if(i==1||i==(num+1)/2) { for(int j=1;j<=num;j++) printf("%c",c); if(i==1) printf("\n"); } else { printf("%c",c); for(int j=2;j int pd[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};//0对应平年 int run(int year) { if((year%4==0 && year%100!=0)||year%400==0) return 1; return 0; } int main() { int year1,year2,month1,month2,day1,day2; int num1,num2; while(scanf("%d%d",&num1,&num2)!=EOF) { if(num1>num2) { int temp=num2; num2=num1; num1=temp; } day1=num1%100; num1=num1/100; month1=num1%100; num1=num1/100; year1=num1; day2=num2%100; num2=num2/100; month2=num2%100; num2=num2/100; year2=num2; int ansday=1; while(year2-year1>1) { if(month1==2 && day1==29) { day1=28; year1++; ansday+=365; } else if(month1>3) { year1++; ansday+=365+run(year1); } else { ansday+=365+run(year1); year1++; } } while(day1!=day2 ||month1!=month2 || year1!=year2) { ansday++; day1++; if(day1>pd[run(year1)][month1]) { day1=day1%pd[run(year1)][month1]; month1++; if(month1==13) { year1++; month1=1; } } //printf("%d %d %d\n",year1,month1,day1); } printf("%d\n",ansday); } return 0; } View Code  PAT B1022 D进制的A+B 注意为0的情况，要么使用do while保证即使是0也执行，要么特判0（注意不能用c判断，因为经过while处理的c一定是0）. P进制转10进制，每次取(x%10)最后一位*当前p加上现有num，之后p=p*P x=x/10。(INIT p=1,num=0) 10进制转p进制，每次%p作为结果存进去，最后倒序输出。注意为0的情况。 #include #include int main() { int a,b,d; scanf("%d %d %d",&a,&b,&d); int c=a+b; int num[100]; int count=0; memset(num,0,sizeof(num)); while(c) { num[count++]=c%d; c=c/d; } if(a+b==0) count=1; for(int i=count-1;i>=0;i--) printf("%d",num[i]); return 0; } View Code  PAT B1009 说反话 可以利用%s不读空格，使用EOF来分割，注意，%s遇到的第一个让他停止的空格会被下次%s忽略，但如果用getchar也能读。 这种只能用于PAT这类一次一个输入数据的。 注意！目前gets在评测机里面会出现CE，不要再使用。正常如果多输入可以一直读取然后用回车啥的判断。结果一样。暂时不写了。 单独读取字符然后用EOF判断也是可以的。(这道题因为换行的原因出现了格式错误，暂时无法纠正) #include #include int main() { char str[100][100]; int i=0; while(scanf("%s",str[i])!=EOF) { i++; } i=i-1; for(i;i>0;i--) { printf("%s ",str[i]); } printf("%s",str[0]); return 0; } View Code   posted on 2020-06-16 10:53  ltx_zero  阅读(10)  评论(0)  编辑  收藏