csu 1785: 又一道简单题 (没错,简单题)

时间:2022-12-18 13:35:26

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

Description

输入一个四个数字组成的整数 n,你的任务是数一数有多少种方法,恰好修改一个数字,把它 变成一个完全平方数(不能把首位修改成 0)。比如 n=7844,有两种方法:3844=62^27744=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

思路:比较水,四个位置依次判断即可,要注意的是首位不能为0,每一位改完的数不能和改之前一样


代码:

#include<iostream>  
#include<algorithm>  
#include<cstdio>  
#include<cmath>  
#include<cstring>  
#include<string>  
#define LL __int64  
using namespace std;

int t;
int n;

int main() {
	scanf("%d", &t);
	int p = 1;
	while (t--) {
		scanf("%d", &n);
		printf("Case %d: ", p++);
		int sum = 0;
		int num;
		int j;
		int k = 0;
		for (int i = 1; i <= 4; i++) {
			if (i == 1)
				j = 1;
			else j = 0;
			for (; j < 10; j++) {
				if (i == 1){
					num = j * 1000 + n % 1000;
					if (j == n / 1000)
						continue;
				}
				else if (i == 2){
					if (j == n / 100 % 10)
						continue;
					num = j * 100 + n / 1000 * 1000 + n % 100;
				}
				else if (i == 3) {
					if (j == n / 10 % 10)
						continue;
					num = j * 10 + n / 100 * 100 + n % 10;
				}
				else {
					if (j == n % 10)
						continue;
					num = j + n / 10 * 10;
				}
				k = sqrt(num);
				if (num == k*k)
					sum++;
			}
		}
		cout << sum << endl;
	}
	system("pause");
	return 0;
}