C++复习(二十一)——三个平方数

 

问题五十:将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(乔金明),谢谢,也可以相互交流下,备注信息随意,只要能看得出是开发者或者学习者即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值