| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1394 人关注过本帖
标题:[求助]c++查找满足特定条件的三位数
只看楼主 加入收藏
jibatian
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-6-27
收藏
 问题点数:0 回复次数:4 
[求助]c++查找满足特定条件的三位数
特定条件:一个三位数的平方是一个六位数字,那么这个三位数和它的平方共有9个数字。要满足这9个数字恰好是1到9,没有重复。要求编写多个函数分别实现上述功能,而后在main函数中进行调用。
搜索更多相关主题的帖子: 位数 条件 数字 函数 
2007-06-27 15:44
HJin
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:401
专家分:0
注 册:2007-6-9
收藏
得分:0 
回复:(jibatian)[求助]c++查找满足特定条件的三位数...

/*---------------------------------------------------------------------------
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;
}
}
}


I am working on a system which has no Chinese input. Please don\'t blame me for typing English.
2007-06-27 17:35
xq0714
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-5-25
收藏
得分:0 
LS签名牛!给的代码也牛,佩服!
2007-06-27 17:52
terisevend
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2007-6-2
收藏
得分:0 

我也写了个。。。顺便问问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编辑过]


2007-06-28 22:12
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
收藏
得分:0 

next_permutation是排序用的, 还有prev_permutation
在algorithm库里..


女侠,约吗?
2007-07-01 23:00
快速回复:[求助]c++查找满足特定条件的三位数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.060676 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved