/*---------------------------------------------------------------------------
File name: Square_3digits.cpp
Author: HJin
Created on: 6/27/2007 02:23:03
Environment: Windows XP Professional SP2 English +
Visual Studio 2005 v8.0.50727.762
Modification history:
Analysis:
Do a brute force search for all th 9! permutations of 1..9.
We want to search a permuatation of 1..9 (stored in a[0..8])
so that
(a_0 a_1 a_2)^2 = (a_3 a_4 a_5 a_6 a_7 a_8).
Sample output:
567 * 567 = 321489
854 * 854 = 729316
Press any key to continue . . .
*/
#include <iostream>
#include <algorithm>
using namespace std;
int a[9];
void search();
int main(int argc, char** argv)
{
search();
return 0;
}
void search()
{
int n_3digits;
int n_6digits;
int i;
for(i=0; i<9; ++i)
{
a[i] = i+1;
}
// the first case 1 2 3 4 5 6 7 8 9 is omitted.
while(next_permutation(a, a+9))
{
n_3digits = 10* (10*a[0] + a[1]) + a[2];
n_6digits = 0;
for(i=3; i<9; ++i)
{
n_6digits = 10 * n_6digits + a[i]; // Horn's rule
}
if(n_3digits * n_3digits == n_6digits)
{
for(i=0; i<3; ++i)
cout<<a[i];
cout<<" * ";
for(i=0; i<3; ++i)
cout<<a[i];
cout<<" = ";
for(i=3; i<9; ++i)
cout<<a[i];
cout<<endl;
}
}
}
我也写了个。。。顺便问问HJin,“next_permutation(a, a+9)”这函数原型是什么?有什么用处。。。?
根据单词意思,是排序的意思。是对数组进行一次排序,并返回是否排序成功的布尔值吗?
以下是我写的。。。思路就是通过对1-9进行排列组合并比较。。。
#include <cstdlib>
#include <iostream>
using namespace std;
void sort_search( int[], int st, int ed );
int main(int argc, char *argv[])
{
int num[9];
for( int i = 0; i < 9; i++ )
num[i] = i+1;
int st = 0, ed = 8;
sort_search( num, st, ed );
system("PAUSE");
return EXIT_SUCCESS;
}
inline void m_sort( int &d1, int &d2 )
{
int tmp;
tmp = d1;
d1 = d2;
d2 = tmp;
}
void sort_search( int n[], int st, int ed )
{
int k;
if( st == ed )
{
int s = 10*( 10*n[0]+n[1] ) + n[2], p = 0;
for( int k = 3; k <= ed; k++ )
p = 10*p + n[k];
if( s*s == p )
cout << s <<" * " << s << " = " << p << endl;
}
else
for( k = st; k <= ed; k++ )
{
m_sort( n[k], n[st] );
sort_search( n, st+1, ed );
m_sort( n[k], n[st] );
}
}
[此贴子已经被作者于2007-6-28 22:17:09编辑过]