问题五十:将1-9九个数字分为三组三位数,每个数字只允许用一次,要求每组的三个数都组成一个平方数
问题五十一:求解九位累计可除数,分别为1-9不重复,这个九位数的前n位刚好可以被n整除,求解这个九位数
/*
问题五十:将1-9九个数字分为三组三位数,每个数字只允许用一次,要求每组的三个数都组成一个平方数
分析:本题依旧采用试探法, 三位数可以进行开平方的数可以计算,即10到33的平方,找出适合的数字即可
问题五十一:求解九位累计可除数,分别为1-9不重复,这个九位数的前n位刚好可以被n整除,求解这个九位数
分析:可以采用回溯法,逐渐测试每一步是否符合条件,不符合将回溯测试
*/
#include<iostream>
using namespace std;
int if_three(int a){
int all[10];
int i;
for(i=0;i<3;i++){
all[i] = a%10;
if(all[i]==0)return 0;
a=a/10;
}
if(all[0]!=all[1] && all[1]!=all[2] && all[0]!=all[2])return 1;
return 0;
}
int three_num(int a,int b,int c){
int i;
int all[10];
for(i=0;i<3;i++){
all[i] = a%10;
all[i+3] = b%10;
all[i+6] = c%10;
if(a==0 || b==0 || c==0)return 0;
a/=10;
b/=10;
c/=10;
}
int count;
for(count = 0;count < 9;count++)
for(i=count+1;i<9;i++){
if(all[i]==all[count])return 0;
}
return 1;
}
void last(){
int i,j=0;
int all[100];
for(i=10;i<=33;i++){
if(i*i>=1000)break;
if(if_three(i*i)==1){
all[j]=i*i;
j++;
}
}
int x,y,z;
for(x=0;x<j;x++){
for(y=x+1;y<j;y++){
for(z=y+1;z<j;z++){
if(three_num(all[x],all[y],all[z])==1){
cout<<all[x]<<" "<<all[y]<<" "<<all[z]<<endl;
}
}
}
}
}
int if_n(int a){
int i,n=a;
for(i=1;;i++){
if(n/10==0)break;
n/=10;
}
if(a%i==0)return 1;
return 0;
}
int main(){
//问题五十
last();
return 0;
}
这其中有不合适或者不正确的地方欢迎指正,我的QQ号码:2867221444(乔金明),谢谢,也可以相互交流下,备注信息随意,只要能看得出是开发者或者学习者即可。