dfs即可。
也不一定要用字符串存储,用int也行,在判断乘积前先判断里面是否有数字相同即可。
#include <iostream>
#include <stdlib.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
bool vis[10] = {false};
char num[7];
void dfs(int step){
if(step == 6){
num[6] = '\0';
long long chengShu = atoi(num);
long long chengJi = chengShu * chengShu;
while(chengJi != 0){
int temp = chengJi % 10;
chengJi /= 10;
if(vis[temp])
return;
}
cout <<chengShu<<" "<< chengShu * chengShu <<endl;
}
for(int i=0; i<=9; i++){
if(step == 0 && i == 0) continue;
if(vis[i] == false){
vis[i] = true;
num[step] = '0' + i;
dfs(step+1);
vis[i] = false;
}
}
}
int main(int argc, char *argv[]) {
dfs(0);
return 0;
}