标签:
原题链接:http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11662&courseid=0
由于每次只改变一个数字,n也只是4位数,可以暴力,也可以BFS
#include <iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std; bool vis2[10000]; bool OK(int n) { int x=sqrt(n); return x*x==n; } int main() { int T,kase=0; //freopen("j.txt","r",stdin); cin>>T; while(T--) { int n; cin>>n; int a[4]; int k=3; while(n) { a[k--]=n%10; n/=10; } bool vis1[10]; int ans=0; printf("Case %d: ",++kase); memset(vis2,false,sizeof(vis2)); for(int i=0; i<4; i++) { memset(vis1,false,sizeof(vis1)); vis1[a[i]]=true; if(i==0) vis1[0]=true; for(int j=0; j<10; j++) { if(!vis1[j]) { int p; if(i==0) p=j*1000+a[1]*100+a[2]*10+a[3]; else if(i==1) p=a[0]*1000+j*100+a[2]*10+a[3]; else if(i==2) p=a[0]*1000+a[1]*100+j*10+a[3]; else if(i==3) p=a[0]*1000+a[1]*100+a[2]*10+j; if(!vis2[p]&&OK(p)) { vis1[j]=true; vis2[p]=true; ans++; } } } } cout<<ans<<endl; } return 0; }
HNNU 11662 又一道简单题【湖南省第十一届大学生计算机程序设计竞赛,模拟,暴力】
标签:
原文地址:http://blog.csdn.net/hurmishine/article/details/52292510