NBUT1647(基础)

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
一点细节没处理好,wa的心碎啊;
注意在替换时,有可能替换的数和原来的数相等,这时相当于没替换。应排除这种情况
AC代码:
#include<cstdio>
#include<cmath>
int main()
{
	int t,n,cnt,i,j,k,m,ca=1,flag;
	scanf("%d",&t);
	while(t--)
	{
		cnt=0;
		scanf("%d",&n);
		for(i=1;i<=4;i++)
		{
		  if(i==1) j=1;
		  else   j=0;
		  for(;j<=9;j++)
		  {
		    flag=0;         //每次让flag=0,只有换成替换的数后使原数变成一个不同的数时flag=1.
		     if(i==1)
			 {
			    k=j*1000+n%1000;
			    if(j!=n/1000) flag=1;
			 }	
			 else if(i==2)
			 {
			 	k=(n/1000)*1000+j*100+n%100;
			 	if(j!=(n/100)%10) flag=1;  
			 }
			 else if(i==3)
			 {
			 	k=(n/100)*100+j*10+n%10;
			 	if(j!=n/10%10) flag=1;
			 }
			 else 
			 {
			 	k=(n/10)*10+j;
			 	if(j!=n%10) flag=1;
			 }
			 if(flag==1)
			 {
			  m=sqrt(k);
			  if(k==m*m) cnt++;
		    }
		  }	
		}
	printf("Case %d: %d\n",ca++,cnt);
	}
	return 0;
}


 
 




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bokzmm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值