| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1788 人关注过本帖
标题:[求助]如何求出文本中哪些数相加等于指定的值
只看楼主 加入收藏
ccwan
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-3-9
收藏
 问题点数:0 回复次数:18 
[求助]如何求出文本中哪些数相加等于指定的值

test.txt


4816
4776
4498
4616
4948
4684
4710
5266
4760
5168
4770
5134
5076
4784
5174
4732
4782
4746
4730
5224
5164
4742
4724
4730
4762
4162
4188
4830
4942
4072
4270
4520
4808
5130
4272
4262
4238
4240
4828
4168
4754
4720
4896
4824
5206
4322
3800
4826
4632
5104
5134
4838
3858
5008
4828
5234
4324
5282
5348
5150
4724
4682
4720
5218
4744
4742
4760
5194
4792
4712
4754
4704

171780
要求:如果有多种组合,依次列出;这72个数中每个数在每种组合中只能用一次。

搜索更多相关主题的帖子: 文本 相加 
2007-03-09 17:46
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 

我的想法是先找出最大数和最小数,然后用171780去除,得到的就是相加的数的个数的取值范围
之后除了挨个算一遍我就想不到更好的办法了。


“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2007-03-09 22:18
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
排序+搜索 应该可以.

倚天照海花无数,流水高山心自知。
2007-03-09 22:38
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 
2楼观点!

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-03-09 23:39
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
2楼的思路不错,但那是相对,数据少的时侯,
这道程序可最少要有30多个不同的数相加而来的.
挨个算一遍就更烦琐了.

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-03-10 00:09
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 
#include "stdio.h"
#define number 171780
main()
{
int data[]={4816,4776,4498,4616,4948,4684,4710,5266,4760,5168,4770,5134,5076,4784,
5174,4732,4782,4746,4730,5224,5164,4742,4724,4730,4762,4162,4188,4830,4942,4072,
4270,4520,4808,5130,4272,4262,4238,4240,4828,4168,4754,4720,4896,4824,5206,4322,
3800,4826,4632,5104,5134,4838,3858,5008,4828,5234,4324,5282,5348,5150,4724,4682,
4720,5218,4744,4742,4760,5194,4792,4712,4754,4704};
int max,min,i;
int num_max,num_min;
max=min=data[0];
for(i=1;i<72;i++)
{
if(max<data[i])
max=data[i];
if(min>data[i])
min=data[i];
}
printf("Max:%d,Min:%d\n",max,min);
num_max=number/min;
num_min=number/max;
printf("num_max:%d,num_min:%d",num_max,num_min);
}

简单算了一下,最多45个,最少32个,如果从32到45排列一遍运算量太大
但是没有想到较好的算法
也许等我学了数据结构才可以解决

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2007-03-10 00:26
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 
研究了两个晚上,还是没有想出什么好的办法,用递归写了个程序,用组合公式算了算,仅仅32个数的和的情况就有3e20个结果,如果再算上从32个到45个计算量不可想像,以下是算32个数的和的程序(10分钟1轮都没走完- -,放弃):
#include "stdio.h"
#define number 171780
long sum[72];
int *p[72];
int num=32; /*定义求多少个数的和*/
int a_width=72; /*定义数组宽度*/
int data[]={4816,4776,4498,4616,4948,4684,4710,5266,4760,5168,4770,5134,5076,4784,
5174,4732,4782,4746,4730,5224,5164,4742,4724,4730,4762,4162,4188,4830,4942,4072,
4270,4520,4808,5130,4272,4262,4238,4240,4828,4168,4754,4720,4896,4824,5206,4322,
3800,4826,4632,5104,5134,4838,3858,5008,4828,5234,4324,5282,5348,5150,4724,4682,
4720,5218,4744,4742,4760,5194,4792,4712,4754,4704};
int comb(int x);
main()
{
int max,min,i;
int num_max,num_min;
max=min=data[0];
for(i=1;i<72;i++)
{
if(max<data[i])
max=data[i];
if(min>data[i])
min=data[i];
}
printf("Max:%d,Min:%d\n",max,min);
num_max=number/min;
num_min=number/max;
printf("num_max:%d,num_min:%d\n",num_max,num_min);

for(i=0;i<72;i++)
{
sum[i]=0;
}
printf("Finding,please wait...\n");
comb(num);
}
comb(int x)
{
int i;
if(x==1)
{
for(p[x-1]=p[x]+1;p[x-1]<(data+a_width);p[x-1]++)
{
sum[x-1]=sum[x]+*p[x-1];
/*for(i=0;i<num-1;i++)
{
printf("\t");
}
printf("%d=%d\n",*p[x-1],sum[x-1]);*/
printf("%ld\t",sum[x-1]);
if(sum[x-1]==number)
{
for(i=num;i>0;i--)
{
printf("%d+",*p[i]);
}
printf("=%ld",number); /*如果找到所求在这里输出*/
}
sum[x-1]=0;
}
}
else if(x==num)
{
for(p[x-1]=data;p[x-1]<=(data+a_width-num);p[x-1]++)
{
sum[x-1]=sum[x]+*p[x-1];
/*printf("%d+\n",*p[x-1]);*/
comb(x-1);
printf("\nThe number %d can be exclude!\n",*p[x-1]);
sum[x-1]=0;
}
}
else
{
for(p[x-1]=p[x]+1;p[x-1]<=(data+a_width-x);p[x-1]++)
{
sum[x-1]=sum[x]+*p[x-1];
/*for(i=0;i<num-x;i++)
{
printf("\t");
}
printf("%d+\n",*p[x-1]);*/
comb(x-1);
sum[x-1]=0;
}
}
}

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2007-03-10 22:58
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
值得鼓励!

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-03-10 23:04
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 
谢楼上!
有没有高手对这个问题给些建议啊,我实在不甘心2个晚上白忙活一场!

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2007-03-10 23:17
ccwan
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-3-9
收藏
得分:0 
这道题莫非真的无解了?
2007-03-13 15:08
快速回复:[求助]如何求出文本中哪些数相加等于指定的值
数据加载中...
 
   



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

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