1~9组成三个3位的平方数
生活随笔
收集整理的這篇文章主要介紹了
1~9组成三个3位的平方数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
http://blog.csdn.net/csy981848153/article/details/7650100
題目:將1、2、3、4、5、6、7、8、9九個(gè)數(shù)字分成三組,每個(gè)數(shù)字只能用一次,即每組三個(gè)數(shù)不允許有重復(fù)數(shù)字,也不許同其它組的三個(gè)數(shù)字重復(fù),要求每組中的三位數(shù)都組成一個(gè)平方數(shù)。
//題目:將1、2、3、4、5、6、7、8、9九個(gè)數(shù)字分成三組,每個(gè)數(shù)字只能用一次, //即每組三個(gè)數(shù)不允許有重復(fù)數(shù)字,也不許同其它組的三個(gè)數(shù)字重復(fù),要求每組中 //的三位數(shù)都組成一個(gè)平方數(shù)。首先求出三位數(shù)中不包含0且是某個(gè)整數(shù)平方的三位 //數(shù);然后將滿足條件的三位數(shù)進(jìn)行組合. //BY AS1138 2011-06-21#include <iostream> using namespace std;int main(void) {int tem = 0;int a[21][3] = {0};int tval[3] = {0};int n = 0;int iTest[9] = {0};for (int i=11;i!=32;++i){tem = i*i;for (int j=2;j>=0;--j){tval[j]= tem % 10;tem /= 10;}if (tval[0] == tval[1] || tval[1] == tval[2] || tval[0] == tval[2]) continue;a[n][0] = tval[0];a[n][1] = tval[1];a[n][2] = tval[2];++n;}//for (int i=0;i!=n;++i)//{// cout<<a[i][0]<<a[i][1]<<a[i][2]<<endl;//}for (int k=0;k!=n-2;++k){for (int t=k+1;t!=n-1;++t){for (int m=t+1;m!=n;++m){iTest[a[k][0] - 1] = 1;iTest[a[k][1] - 1] = 1;iTest[a[k][2] - 1] = 1;iTest[a[t][0] - 1] = 1;iTest[a[t][1] - 1] = 1;iTest[a[t][2] - 1] = 1;iTest[a[m][0] - 1] = 1;iTest[a[m][1] - 1] = 1;iTest[a[m][2] - 1] = 1;for (int i=0;i!=9;++i){if (iTest[i] != 1)break;if(i == 8){cout<<a[k][0]<<a[k][1]<<a[k][2]<<" "<<a[t][0]<<a[t][1]<<a[t][2]<<" "<<a[m][0]<<a[m][1]<<a[m][2]<<endl;} }//end for(int i)for (int j=0;j!=9;++j){iTest[j] = 0;}}//end for(int m)}//end for(int t)}//end for(int k)return 0; }
和我的想法類似,我用的是回溯+剪枝,應(yīng)該比這個(gè)n^3更快
完全平方數(shù)的最后一個(gè)數(shù)字肯定是1,4,5,6,9中的一個(gè)
所以把已經(jīng)計(jì)算出來(lái)的完全平方數(shù)按照其最后一個(gè)數(shù)字分類
就把問(wèn)題的規(guī)模從n轉(zhuǎn)為n/2
總結(jié)
以上是生活随笔為你收集整理的1~9组成三个3位的平方数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。