tips:有些题得出答案的时间会比较长,这时候我们需要等一会,如果不放心怕是出现了什么问题可以设置一个输出,就是当有满足题意的数据出现后就输出一次,这样我们就会看到明显的结果
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
int s[10] = {0,1,2,3,4,5,6,7,8,9};
long long res = 0;
map<long long,int>m;
void dfs(int step,long long last)
{
if(step==10)
{
res++;
return;
}
if(s[step]==0)
{
if(step==0)
dfs(step+1,0);
return;
}
long long sum = 0;
for(int i=step;i<=9;i++)
{
sum = sum*10+s[i];
if(m[sum]==1 && sum>last) dfs(i+1,sum);
}
}
int main()
{
for(long long i=1;i<=500000;i++) m[i*i]= 1;
do
{
dfs(0,0);
}while(next_permutation(s,s+10));
printf("%lld",res);
return 0;
}
要加油哇!!!