免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2133 | 回复: 8
打印 上一主题 下一主题

[算法] 看看这个题目的算法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-03 13:51 |只看该作者 |倒序浏览
问题如下:1A+2B+3C+4D+5E+6F+7G=X
其中X为已知量,A至G为未知量,取值范围是1-22 ,不能重复,设计一个程序将未知量求出

大家有没有好的算法,刚看到这题目.来这看看大家的意思.

论坛徽章:
0
2 [报告]
发表于 2008-12-03 14:30 |只看该作者
缩小取值范围,穷举

偶笨,只会这个

论坛徽章:
0
3 [报告]
发表于 2008-12-03 16:24 |只看该作者

回复 #2 雨过白鹭洲 的帖子

他说不能重复~~意思是说未知量的尝试取值不能重复吗?
就是说假如A取1,B取值如果从1到22都尝试过的话,接着A取2的时候B就没有值来试了??

论坛徽章:
0
4 [报告]
发表于 2008-12-03 16:34 |只看该作者
单纯形法线性规划。

论坛徽章:
0
5 [报告]
发表于 2008-12-03 16:45 |只看该作者
没看到不能重复,哈

[ 本帖最后由 deadlylight 于 2008-12-3 16:46 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-12-03 17:15 |只看该作者
原帖由 cloudice 于 2008-12-3 16:24 发表
他说不能重复~~意思是说未知量的尝试取值不能重复吗?
就是说假如A取1,B取值如果从1到22都尝试过的话,接着A取2的时候B就没有值来试了??

A≠B≠C≠D≠E≠F≠G

论坛徽章:
0
7 [报告]
发表于 2008-12-04 09:43 |只看该作者
没有好的方法,写了一个穷举的

#include<stdio.h>

#define NUM 7
#define MAX 22

#define X 100

int coe[NUM];
int mask[MAX];

int compute( int start )
{
&nbsp;&nbsp;&nbsp;&nbsp;int i, j;
&nbsp;&nbsp;&nbsp;&nbsp;int sum;
&nbsp;&nbsp;&nbsp;&nbsp;int ret;
&nbsp;&nbsp;&nbsp;&nbsp;if( start > NUM )
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for( i = 0; i < NUM; i++ )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum += (i+1)*coe[i];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( sum == X )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;for( i = 0; i < MAX; i ++ )
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( mask[i] )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;coe[start-1] = i+1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mask[i] = 1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret = compute( start+1 );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mask[i] = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( ret == 0 )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for( j = 0; j < NUM; j++ )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf( "%d,", coe[j] );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf( "\n" );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;return -1;
}

int main()
{
&nbsp;&nbsp;&nbsp;&nbsp;int i;
&nbsp;&nbsp;&nbsp;&nbsp;for( i = 0; i < MAX; i++ )
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mask[i] = 0;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;compute( 1 );
&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}

论坛徽章:
0
8 [报告]
发表于 2008-12-04 09:48 |只看该作者
原帖由 HotTaro 于 2008-12-3 13:51 发表
问题如下:1A+2B+3C+4D+5E+6F+7G=X
其中X为已知量,A至G为未知量,取值范围是1-22 ,不能重复,设计一个程序将未知量求出

大家有没有好的算法,刚看到这题目.来这看看大家的意思.

这个正如4楼所说的,其实也可以看成是线性代数中的矩阵方程,求出解集后,用条件进行筛选即可。。。
不过好几年没翻书了,细节谈不上来

论坛徽章:
1
天秤座
日期:2014-04-27 07:42:20
9 [报告]
发表于 2008-12-04 10:45 |只看该作者
楼上正解
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP