将1、2、3、4、5、6、7、8、9九个数字分成三组,

王朝知道·作者佚名  2009-07-28
窄屏简体版  字體: |||超大  
 
分類: 電腦/網絡 >> 程序設計 >> 其他編程語言
 
問題描述:

将1、2、3、4、5、6、7、8、9九个数字分成三组,每个数字只能用一次,即每组三个数不允许有重复的数字,也不许同其它组的三个数字重复,要求每组中的三位数整数都是某个整数的平方。 用c++ 来编

參考答案:

#include <iostream>

#include <algorith>

#include <vector>

#include <cmath>

using namespace std;

void main()

{

vector<int> a;

double s1,s2,s3;

for (int i=0;i<9;++i){

a.push_back(i+1);

}

do{

s1=a[0]*100+a[1]*10+a[2];

s2=a[3]*100+a[4]*10+a[5];

s3=a[6]*100+a[7]*10+a[8];

if (fabs(sqrt(s1)-(int)sqrt(s1))<1e-5 &&

fabs(sqrt(s2)-(int)sqrt(s2))<1e-5 &&

fabs(sqrt(s3)-(int)sqrt(s3))<1e-5 )

{

printf("%d,%d,%d\n",(int)s1,(int)s2,(int)s3);

}

}while(next_permutation(a.begin(), a.end()));

}

输出:

361,529,784

361,784,529

529,361,784

529,784,361

784,361,529

784,529,361

也就是361,529,784这三组数

------------------

很深奥么?我这么写其实算简单了,说一下吧:

next_permutation(a.begin(), a.end())这个是标准库函数,专门生成全排列的,比如123的全排列有123,132,213,231,312,321这六个

,这个函数也可自己实现,不过那个算法就复杂了

有了全排列后,这样的语句fabs(sqrt(s1)-(int)sqrt(s1))<1e-5就是用来判断一个3位数是否是完全平方,用的是判断开方后的小数点后的数是否小于0.00001来进行的

这下懂了吧

小贴士:① 若网友所发内容与教科书相悖,请以教科书为准;② 若网友所发内容与科学常识、官方权威机构相悖,请以后者为准;③ 若网友所发内容不正确或者违背公序良俗,右下举报/纠错。
 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航