POJ(3979-3982) && 第二届顶嵌杯初赛

//第二届顶嵌杯初赛 题目 POJ

 

//A题
#include<stdio.h>

int a3,b3;
void Reduce()
{
    while(a3%2==0 && b3%2==0)
        {  a3/=2; b3/=2;  }
    while(a3%3==0 && b3%3==0)
        {  a3/=3; b3/=3;  }
    while(a3%5==0 && b3%5==0)
        {  a3/=5; b3/=5;  }
    while(a3%7==0 && b3%7==0)
        {  a3/=7; b3/=7;  }
}

int main()
{
    int a1,b1,a2,b2;
    char option;
    char inputStr[10];
    while(scanf("%s",&inputStr)!=EOF)
    {
        a1=inputStr[0]-'0';
        b1=inputStr[2]-'0';
        option=inputStr[3];
        a2=inputStr[4]-'0';
        b2=inputStr[6]-'0';

        b3=b1*b2;
        if(option=='+')
            a3=a1*b2+a2*b1;
        else
            a3=a1*b2-a2*b1;   

        if(a3==0)
            printf("0\n");
        else
        {
            Reduce();
            if(b3!=1)
                printf("%d/%d\n",a3,b3);
            else
                printf("%d\n",a3);
        }
    }
    return 0;
}

 

//B题
#include<stdio.h>

int main()
{
    int a,b;
    while(scanf("%d %d",&a,&b)!=EOF)
    {
        printf("%d\n",a%b);
    }
    return 0;
}

//C题
#include<stdio.h>
#include<string.h>

int main()
{
    char inputStr[1005]={0};
    char out[1005]={0};
    int len,i,j;


    while(fgets(inputStr, 1000, stdin)!=0)   //读入一行(包含空格)
    {
        i=0;j=0;
        len=strlen(inputStr);
        while(i<len-1)                         //由于使用fgets会把'\n'保存在串尾中,所以不要最后一位
        {
            if(inputStr[i]=='y' && i+2<len)
            {
                if(inputStr[i+1]=='o' && inputStr[i+2]=='u')
                {
                    out[j++]='w';
                    out[j++]='e';
                    i=i+3;
                }
                else
                {
                    out[j++]=inputStr[i++];
                }
            }
            else
            {
                out[j++]=inputStr[i++];
            }
        }
        out[j]='\0';
        printf("%s\n",out);
    }
    return 0;
}

 

//D题
//高精度题目,用上longlong,再分三段来处理

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

#define WeiNum 1000000000000
long long A[105][3];
int status[105];


void Calcu(int n)
{
    A[n][0]=A[n-1][0]+A[n-2][0]+A[n-3][0];
    if(A[n][0]/WeiNum>0)
    {
        A[n][1]=A[n][0]/WeiNum;
        A[n][0]%=WeiNum;
    }
    if(A[n-1][1]>0)
    {
        A[n][1]+=A[n-1][1]+A[n-2][1]+A[n-3][1];
        if(A[n][1]/WeiNum>0)
        {
            A[n][2]=A[n][1]/WeiNum;
            A[n][1]%=WeiNum;
        }
        if(A[n-1][2]>0)
            A[n][2]+=A[n-1][2]+A[n-2][2]+A[n-3][2];
    }
}


void fun(int n)
{
    if(n==0 || n==1 || n==2)
        ;
    else if(status[n]==0)
    {
        fun(n-3);
        fun(n-2);
        fun(n-1);
        Calcu(n);
        status[n]=1;   
    }
    return ;
}

int main()
{
    int a0,a1,a2;
    int i;
    long long temp;
    int count;

    while(scanf("%d %d %d",&a0,&a1,&a2)!=EOF)
    {
        memset(status,0,sizeof(status));
        memset(A,0,sizeof(A));
        A[0][0]=a0;
        A[1][0]=a1;
        A[2][0]=a2;
       
        fun(99);
        if(A[99][2]>0)
            printf("%lld",A[99][2]);
        if(A[99][1]>0)
        {
            if(A[99][2]>0)
            {
                count=0;
                temp=A[99][1];
                while(temp>0)
                {
                    temp/=10;
                    count++;
                }
                for(i=0;i<12-count;i++)
                    printf("0");
            }
            printf("%lld",A[99][1]);
        }
        if(A[99][1]>0 || A[99][2]>0)
        {
            count=0;
            temp=A[99][0];
            while(temp>0)
            {
                temp/=10;
                count++;
            }
            for(i=0;i<12-count;i++)
                printf("0");
        }
        printf("%lld\n",A[99][0]);

    }
    return 0;
}

你可能感兴趣的:(poj)