刷题笔记day2

【PAT A1001】 A+B Format

#include<stdio.h>
#include<string.h>

int main()
{
    int a,b,flag;
    int c;
    scanf("%d%d",&a,&b);
    c = a + b;
    if(c < 0) flag = -1;
    else flag = 1;
    c *= flag;
    char str[1000];
    char ans[1000];
    int ccount = 0;

    sprintf(str,"%d",c);
    
    int len = strlen(str);
    for(int i=len-1;i>=0;i--)
    {
        if((len-i-1) % 3 == 0 && i != len-1)
            ans[ccount++] = ',';
        ans[ccount++] = str[i];

    }
    
    if(flag == -1) printf("-");

    for(int j=ccount-1;j>=0;j--)
        printf("%c",ans[j]);
    printf("\n");
    
}

【PAT 1002】 A+B for Polynomials

#include<stdio.h>
#include<string.h>
double c[1005];
int main()
{
    memset(c,0,sizeof(c));
    int k1,k2;
    int zhi;
    double xi;

    scanf("%d",&k1);
    for(int i=0;i<k1;i++)
    {
        scanf("%d%lf",&zhi,&xi);
        c[zhi] += xi;
    }

    scanf("%d",&k2);

    for(int j=0;j<k2;j++)
    {
        scanf("%d%lf",&zhi,&xi);
        c[zhi] += xi;    
    }

    int ccount = 0;
    for(int k=0;k<1005;k++)
    {
        if(c[k] != 0)
        {
            ccount++;
        }
    }

    printf("%d",ccount);
    for(int kk=1004;kk>=0;kk--)
    {
        if(c[kk] != 0)
        {
            printf(" %d %.1lf",kk,c[kk]);
        }
    }
    printf("\n");
}

计算n!的末尾有多少个零。

即计算n!中以5为质因子的个数。

//计算质因子
//cal(n,5)
int cal(int n.int p)
{
    int ans = 0;
    while(n)
    {
        ans += n/p;
        n /= p;
    }
    return ans;
}

计算组合数C(n,m)

//o(m)计算组合数
long long C(long long n,long long m)
{
    long long ans = 1;
    for(long long i = 1; i <= m;i++)
    {
        ans = ans* (n - m + i)/i;
    }
    return ans;
}

自测-1 打印沙漏 

此题的坑点在于题目没有叙述,某一行输出符号之后是空格还是直接下一行。一开始是每行打印2k+1字符,格式错误。后来改成不输出符号后的空格,即通过。

pta平台不会忽略输出行之后的空格。

#include<stdio.h>
int main()
{
    int n;
    char c = '*';
    int r;
    scanf("%d %c",&n,&c);

    //2k*k-1

    int k;
    for(k=1;2*k*k-1<=n;k++)
    {
    }
    
    k--;
    //printf("k: %d\n",k);
    
    r = n - 2*k*k + 1;

    int i,j;
    for(i=k;i>0;i--)
    {
        for(j=0;j<2*k-1;j++)
        {
            if(j<k-i )
                printf(" ");
            else if(j>2*k-1-k+i-1)
                break;
            else printf("%c",c);
        }
        printf("\n");
    }

    for(i=1;i<k;i++)
    {
        for(j=0;j<2*k-1;j++)
        {
            if(j<k-i-1 )
                printf(" ");
            else if( j>2*k-1-k+i)
                break;
            else printf("%c",c);            
        }
        printf("\n");
    }

    printf("%d",r);

}

自测-2 素数对猜想

使用了欧拉素筛,不知道暴力是否会超时。

#include<stdio.h>
int isp[100005]={0};
int main()
{
    int n;
    scanf("%d",&n);
    int i;
    for(i=2;i<100005;i++)
    {
        if(isp[i]==0)
        for(int j = i+i;j<100005;j+=i)
        {
            isp[j] = 1;
        }
    }
    
    int ccount = 0;
    int left = 2;
    int right = 3;
    for(i=4;i<n+1;i++)
    {
        if(isp[i] == 0)
        {
            //printf("i:%d\n",i);
            left = right;
            right = i;
            if(right - left == 2)
                ccount++;
        }
    }

    printf("%d\n",ccount);
}

自测-4 Have Fun with Numbers 

由于超过了unsigned long long的范围,需要使用高精度加法。

#include<stdio.h>
#include<string.h>

int num[11];
int ans[11];

char temp[21];
char str[21];
int s=0;

int c[21];

int main()
{
    int exist = -1;

    memset(num,0,sizeof(num));
    memset(ans,0,sizeof(ans));

    scanf("%s",temp);

    int len = strlen(temp);

    for(int i=len-1;i>=0;i--)
    {
        int t = temp[i] - '0';
        num[t]++;
        str[s++] = temp[i];
    }

    int carry = 0;
    for(int j=0;j<s;j++)
    {
        //printf("%c",str[j]);
        carry = (str[j]-'0')*2 + carry;
        c[j] = carry % 10;
        carry /= 10;
    }
    if(carry!=0)
    {
        c[s++] = carry;
        exist = 0;
    }
    
    //printf("exist:%d\n",exist);

    if(exist == 0)
    {
        printf("No");
    }
    else if(exist == -1)
    {
        //ans[]
        for(int q=0;q<s;q++)
        {
            ans[c[q]]++;
        }

        for(int p=0;p<11;p++)
        {
            if(ans[p]!=num[p])
            {
                //printf("ans[%d]%d!=num[%d]%d",p,ans[p],p,num[p]);
                exist = 1;
                break;
            }
        }

        if(exist == 1) printf("No");
        else printf("Yes");
    }


    printf("\n");
    for(int k=s-1;k>=0;k--)
    {
        printf("%d",c[k]);
    }
    printf("\n");
}

猜你喜欢

转载自www.cnblogs.com/yoyoyayababy/p/12386807.html