1~9组成三个3位的平方数
生活随笔
收集整理的這篇文章主要介紹了
1~9组成三个3位的平方数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://blog.csdn.net/csy981848153/article/details/7650100
題目:將1、2、3、4、5、6、7、8、9九個數字分成三組,每個數字只能用一次,即每組三個數不允許有重復數字,也不許同其它組的三個數字重復,要求每組中的三位數都組成一個平方數。
//題目:將1、2、3、4、5、6、7、8、9九個數字分成三組,每個數字只能用一次, //即每組三個數不允許有重復數字,也不許同其它組的三個數字重復,要求每組中 //的三位數都組成一個平方數。首先求出三位數中不包含0且是某個整數平方的三位 //數;然后將滿足條件的三位數進行組合. //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; }
和我的想法類似,我用的是回溯+剪枝,應該比這個n^3更快
完全平方數的最后一個數字肯定是1,4,5,6,9中的一個
所以把已經計算出來的完全平方數按照其最后一個數字分類
就把問題的規模從n轉為n/2
總結
以上是生活随笔為你收集整理的1~9组成三个3位的平方数的全部內容,希望文章能夠幫你解決所遇到的問題。