PAT(乙级)2020年秋季考试 7-1 多二了一点 (15分)

7-1 多二了一点 (15分)
 

若一个正整数有 2 个数位,后 n 个数位组成的数恰好比前 n 个数位组成的数多 2,则称这个数字“多二了一点”。如 24、6668、233235 等都是多二了一点的数字。

给定任一正整数,请你判断它有没有多二了那么一点。

输入格式:

输入在第一行中给出一个正整数 N(≤)。

输出格式:

在一行中根据情况输出下列之一:

  • 如果输入的整数没有偶数个数位,输出 Error: X digit(s),其中 X 是 N 的位数;
  • 如果是偶数位的数字,并且是多二了一点,输出 Yes: X - Y = 2,其中 X 是后一半数位组成的数,Y 是前一半数位组成的数;
  • 如果是偶数位的数字,但并不是多二了一点,输出 No: X - Y != 2,其中 X 是后一半数位组成的数,Y 是前一半数位组成的数。

输入样例 1:

233235
 

输出样例 1:

Yes: 235 - 233 = 2
 

输入样例 2:

5678912345
 

输出样例 2:

No: 12345 - 56789 != 2
 

输入样例 3:

2331235
 

输出样例 3:

Error: 7 digit(s)

代码讲解:只要按照题意模拟即可。。。
#include<stdio.h>
#include<string.h>
int check(char a[])
{
    int i;
    int str=strlen(a);
    for(i=0;i<str/2-1;i++)
    {
        if(a[i]!=a[i+str/2])
        return 0;
    }
    if(a[str/2-1]+2==a[str-1])
    return 1;
    else
    return 0;
    
}
int main()
{
    char a[10001];
    scanf("%s",a);
    int i,str=strlen(a);
    if(str%2!=0)
    {
        printf("Error: %d digit(s)\n",str);        
    }
    else
    {
        if(check(a))
        {
            printf("Yes: %s - ",a+str/2);
            for(i=0;i<str/2;i++)
            printf("%c",a[i]);
            printf(" = 2\n");
        }
        else
        {
            printf("No: %s - ",a+str/2);
            for(i=0;i<str/2;i++)
            printf("%c",a[i]);
            printf(" != 2\n");
        }
    }
    return 0;
}

 

 
posted @ 2020-11-29 20:39  罪梦者  阅读(221)  评论(0)    收藏  举报