省赛模拟一 又一道简单题

http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1785


输入一个四个数字组成的整数 n,你的任务是数一数有多少种方法,恰好修改一个数字,把它 变成一个完全平方数(不能把首位修改成 0)。比如 n=7844,有两种方法:3844=62^2和 7744=88^2

Input

输入第一行为整数 T (1<=T<=1000),即测试数据的组数,以后每行包含一个整数 n (1000<=n<=9999)。

Output

对于每组数据,输出恰好修改一个数字,把 n 变成完全平方数的方案数。

Sample Input
2
7844
9121
Sample Output
Case 1: 2
Case 2: 0


根据1000<=n<=9999,可以先算出该范围内的完全平方数,然后再和n对比,只有一个数字不同个数就加一。
写这个的时候有点顾虑会不会出现本身就是完全平方数、改一个数字还是完全平方数的数,于是打印了1000~9999之间的完全平方数,好像没有符合的,于是就遇到有且仅有一个数字不一样的才计入。


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define maxn 1111111
int main()
{
    int t=0,i,j,k;
    int T,cout,c;
    char n[7],a[100][7];
    for(j=0,i=32;i*i<=9999;i++,j++)
    {
        a[j][0]=i*i/1000+'0';
        a[j][1]=i*i/100%10+'0';
        a[j][2]=i*i/10%10+'0';
        a[j][3]=i*i%10+'0';
        a[j][4]='\0';
 //       printf("%s\n",a[j]);
    }
    scanf("%d",&T);
    while(T--)
    {
        t++;
        scanf("%s",n);
        printf("Case %d: ",t);
        for(c=i=0;i<j;i++)
        {
            for(cout=k=0;k<4;k++){
                if(n[k]!=a[i][k])cout++;
                if(cout>1)
                    break;}
            if(cout==1)
                c++;
        }
        printf("%d\n",c);

    }
    return 0;
}


posted on 2017-07-09 16:39  一零七  阅读(133)  评论(0编辑  收藏  举报

导航