码迷,mamicode.com
首页 > 其他好文 > 详细

NBUT 1647 又一道简单题

时间:2016-08-20 16:25:53      阅读:475      评论:0      收藏:0      [点我收藏+]

标签:

题目:

Description

输入一个四个数字组成的整数 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

因为范围比较小,所以直接枚举就可以判断是不是完全平方数。

而且这样的话,可以忽略掉首位不能变成0这个限制了,代码就变得更有对称美。

代码:

#include<iostream>
using namespace std;

bool ok(int n)
{
	for (int i = 32; i<100; i++)if (i*i == n)return true;
	return false;
}

int f(int n)
{
	int a, b, c, d;
	a = n / 1000;
	b = n / 100 % 10;
	c = n / 10 % 10;
	d = n % 10;
	int sum = 0;
	for (int i = 0; i <= 9; i++)if (ok(n + (i - a) * 1000))sum++;
	for (int i = 0; i <= 9; i++)if (ok(n + (i - b) * 100))sum++;
	for (int i = 0; i <= 9; i++)if (ok(n + (i - c) * 10))sum++;
	for (int i = 0; i <= 9; i++)if (ok(n + i - d))sum++;
	if (ok(n))sum -= 4;
	return sum;
	
}
int main()
{
	int t, n;
	cin >> t;
	for (int cas = 1; cas <= t; cas++)
	{
		cin >> n;
		cout << "Case " << cas << ": " << f(n) << endl;
	}
	return 0;
}

NBUT 1647 又一道简单题

标签:

原文地址:http://blog.csdn.net/nameofcsdn/article/details/52261887

(1)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!