标签:scanf 数字 完全 暴力 字符 tin size 情况 输出
2
7844
9121
Case 1: 2
Case 2: 0
暴力枚举,但是有些小技巧,因为一定是四位数,所以容易找出所有的完全平方数
31*31=916
32*32=1024
…………
99*99=9801
100*100=10000
将这些数用数组标记遍历的时候直接判断
#include <iostream> #include <math.h> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; int main() { int T; int n; int sum=0; int num=1; char s[5];//输入的四位数 bool v[10001];//标记数组 memset(v,false,sizeof(v)); for(int i=32;i<100;i++){ v[i*i]=true;//把四位数的完全平方数标记下来 } scanf("%d",&T); while(T--){ sum=0; scanf("%s",s); n=atoi(s);//字符串转整型 for(int k=1000,i=0;i<4;k/=10,i++){//遍历改变字符串的第i位 for(int j=0;j<=9;j++){ /*i==0&&j==0是首位变成0的情况 s[i]-‘0‘==j是n不变的情况 */ if((i==0&&j==0)||(s[i]-‘0‘==j)){ continue; } else if(v[n-(s[i]-‘0‘-j)*k]){ sum++; } } } printf("Case %d: %d\n",num++,sum); } return 0; }
标签:scanf 数字 完全 暴力 字符 tin size 情况 输出
原文地址:http://www.cnblogs.com/LuRenJiang/p/7464668.html