ltx_zero

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  113 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

PAT B1001害死人不偿命的(3n+1) 猜想

#include<stdio.h>
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<iostream>
#include<stdio.h>
#include<string.h>
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<stdio.h>
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<num;j++)
                printf(" ");
            printf("%c\n",c);
        }
    }
    return 0;
}
View Code

 codeup 1928日期差值(非PAT 比较有锻炼意义的模拟)

这个先按年调整再一个一个加(截至到year2-year1<=1),注意不是在等于12或者当月日期的时候%,是大于,不然会出现0

按照年加的时候,如果3月以后看下一年是否闰,如果2.28及之前看本年,如果正好2.29,就是365,另外调整day为28。

另外这个逢400又闰注意

最后的叠加不要再用月算了,更麻烦!(不仅要考虑每个月,还要考虑20200501和20210103这种跨的,直接大小于号也不好比浪费时间)直接一个一个加就可以

还有就是codeup是多输入在一起的。

这种稍微复杂一点的模拟都不能一次过,需要加强

#include<stdio.h>
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<stdio.h>
#include<string.h>
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<stdio.h>
#include<string.h>
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编辑  收藏