OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5982|回复: 23

如何用c语言从一组给定数中找到一个数或者几个数的和使其值最接近指定的数

[复制链接]

63

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1136
金钱
1136
注册时间
2015-11-29
在线时间
146 小时
发表于 2017-9-28 11:27:32 | 显示全部楼层 |阅读模式
1金钱
如何用c语言从一组给定数中找到一个数或者几个数的和使其值最接近指定的数

最佳答案

查看完整内容[请看2#楼]

你可以同时做两步处理。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2017-9-28 11:27:33 | 显示全部楼层
feiyang0725 发表于 2017-9-29 08:10
这样只能找出,这一组中最接近指定数的元素,但是在这个数组里可能会存在几个数相加更加接近指定数,我还 ...

你可以同时做两步处理。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2017-6-21
在线时间
8 小时
发表于 2017-9-28 11:48:05 | 显示全部楼层
ACM的题,网上搜"三姐妹点菜"
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2017-9-29 01:24:12 | 显示全部楼层
从头开始找,遍历一遍,肯定就找出了
回复

使用道具 举报

63

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1136
金钱
1136
注册时间
2015-11-29
在线时间
146 小时
 楼主| 发表于 2017-9-29 08:10:06 | 显示全部楼层
正点原子 发表于 2017-9-29 01:24
从头开始找,遍历一遍,肯定就找出了

这样只能找出,这一组中最接近指定数的元素,但是在这个数组里可能会存在几个数相加更加接近指定数,我还需要考虑数组中几个数相加的情况。。。
回复

使用道具 举报

1

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1461
金钱
1461
注册时间
2011-12-1
在线时间
110 小时
发表于 2017-9-29 10:52:39 | 显示全部楼层
feiyang0725 发表于 2017-9-29 08:10
这样只能找出,这一组中最接近指定数的元素,但是在这个数组里可能会存在几个数相加更加接近指定数,我还 ...

你数组可先查找单个是否满足要求,然后再任意两个相加是否有,然后3个任意相加,以此类推,如果有一个组合都不满足条件,那后面的就可以不找了。
专业从事软硬件设计,毕业设计,C51/AVR/MSP430/STM32等单片机软硬件制作与定制。有需求的可以联系我。QQ:3436737049淘宝店铺:龙隽电子科技
回复

使用道具 举报

63

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1136
金钱
1136
注册时间
2015-11-29
在线时间
146 小时
 楼主| 发表于 2017-9-30 11:47:29 | 显示全部楼层
xlong_06 发表于 2017-9-29 10:52
你数组可先查找单个是否满足要求,然后再任意两个相加是否有,然后3个任意相加,以此类推,如果有一个组 ...

这个道理我懂,如果数组里面有8个元素,你想过会有多少种组合没?有没有具体算法呀。。
回复

使用道具 举报

1

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1461
金钱
1461
注册时间
2011-12-1
在线时间
110 小时
发表于 2017-9-30 15:33:42 | 显示全部楼层
feiyang0725 发表于 2017-9-30 11:47
这个道理我懂,如果数组里面有8个元素,你想过会有多少种组合没?有没有具体算法呀。。

这个组合是很多,就看你自己的水平了,这个算法应该还不算是很复杂的,有清晰的规律应该还好些,相信你可以写出来的。
专业从事软硬件设计,毕业设计,C51/AVR/MSP430/STM32等单片机软硬件制作与定制。有需求的可以联系我。QQ:3436737049淘宝店铺:龙隽电子科技
回复

使用道具 举报

12

主题

432

帖子

0

精华

高级会员

Rank: 4

积分
729
金钱
729
注册时间
2012-6-21
在线时间
59 小时
发表于 2017-10-5 10:34:34 来自手机 | 显示全部楼层
遍历,相减,
回复

使用道具 举报

33

主题

159

帖子

0

精华

高级会员

Rank: 4

积分
527
金钱
527
注册时间
2017-1-21
在线时间
192 小时
发表于 2017-10-6 16:27:33 | 显示全部楼层
本帖最后由 oyixi001 于 2017-10-6 16:28 编辑

好复杂。。
回复

使用道具 举报

16

主题

339

帖子

0

精华

高级会员

Rank: 4

积分
849
金钱
849
注册时间
2017-6-18
在线时间
166 小时
发表于 2017-10-7 11:55:31 来自手机 | 显示全部楼层
第一步应该要对数据进行归类,比如说,所有第一个数固定为同一相同元素,第二个也一样,就这样按层按顺序放好,下次查的时候只要查到这一层头跟尾,然后记住它,然后再查的时候只要在一层里找就可以了,以此类推,每一次查到都可以很容易,然后就效仿五笔字型输入法是怎么查的,这样对付这种类型大数据,就可以很简单查完。可能这里面还有其它很高深的算法可以用,但是我就用过这种。
回复

使用道具 举报

16

主题

339

帖子

0

精华

高级会员

Rank: 4

积分
849
金钱
849
注册时间
2017-6-18
在线时间
166 小时
发表于 2017-10-7 11:55:31 来自手机 | 显示全部楼层
第一步应该要对数据进行归类,比如说,所有第一个数固定为同一相同元素,第二个也一样,就这样按层按顺序放好,下次查的时候只要查到这一层头跟尾,然后记住它,然后再查的时候只要在一层里找就可以了,以此类推,每一次查到都可以很容易,然后就效仿五笔字型输入法是怎么查的,这样对付这种类型大数据,就可以很简单查完。可能这里面还有其它很高深的算法可以用,但是我就用过这种。
回复

使用道具 举报

16

主题

339

帖子

0

精华

高级会员

Rank: 4

积分
849
金钱
849
注册时间
2017-6-18
在线时间
166 小时
发表于 2017-10-7 11:55:31 来自手机 | 显示全部楼层
第一步应该要对数据进行归类,比如说,所有第一个数固定为同一相同元素,第二个也一样,就这样按层按顺序放好,下次查的时候只要查到这一层头跟尾,然后记住它,然后再查的时候只要在一层里找就可以了,以此类推,每一次查到都可以很容易,然后就效仿五笔字型输入法是怎么查的,这样对付这种类型大数据,就可以很简单查完。可能这里面还有其它很高深的算法可以用,但是我就用过这种。
回复

使用道具 举报

16

主题

339

帖子

0

精华

高级会员

Rank: 4

积分
849
金钱
849
注册时间
2017-6-18
在线时间
166 小时
发表于 2017-10-7 11:55:51 来自手机 | 显示全部楼层
原子的网站好卡
回复

使用道具 举报

16

主题

339

帖子

0

精华

高级会员

Rank: 4

积分
849
金钱
849
注册时间
2017-6-18
在线时间
166 小时
发表于 2017-10-7 12:11:10 来自手机 | 显示全部楼层
实际上针对这种问题,还可以反过来想,为什么不能先让主机把某一价格范围的全都给列出来,列个表,然后只要找这个表就可以了,1ms可以算出来
回复

使用道具 举报

16

主题

339

帖子

0

精华

高级会员

Rank: 4

积分
849
金钱
849
注册时间
2017-6-18
在线时间
166 小时
发表于 2017-10-7 12:11:10 来自手机 | 显示全部楼层
实际上针对这种问题,还可以反过来想,为什么不能先让主机把某一价格范围的全都给列出来,列个表,然后只要找这个表就可以了,1ms可以算出来
回复

使用道具 举报

63

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1136
金钱
1136
注册时间
2015-11-29
在线时间
146 小时
 楼主| 发表于 2017-10-7 13:35:29 | 显示全部楼层
wlq19911021 发表于 2017-10-7 12:11
实际上针对这种问题,还可以反过来想,为什么不能先让主机把某一价格范围的全都给列出来,列个表,然后只要 ...

其实就是相加计算的问题,单独的取表中最接近的算法我已经整理出来了,就是要把其中几项相加的值与设定值比较稍微有点麻烦。。表里面的值是随机的。。
回复

使用道具 举报

16

主题

339

帖子

0

精华

高级会员

Rank: 4

积分
849
金钱
849
注册时间
2017-6-18
在线时间
166 小时
发表于 2017-10-7 23:07:39 来自手机 | 显示全部楼层
计算不是问题,查找与排列才是问题,去了五笔字型如何快速查找编码,比一般查询法N次方倍。
回复

使用道具 举报

16

主题

339

帖子

0

精华

高级会员

Rank: 4

积分
849
金钱
849
注册时间
2017-6-18
在线时间
166 小时
发表于 2017-10-7 23:10:32 来自手机 | 显示全部楼层
如果真是做菜单,直接用主机一次性算所有状态,以后直接调用就可以了
回复

使用道具 举报

63

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1136
金钱
1136
注册时间
2015-11-29
在线时间
146 小时
 楼主| 发表于 2017-10-8 08:17:51 | 显示全部楼层
wlq19911021 发表于 2017-10-7 23:10
如果真是做菜单,直接用主机一次性算所有状态,以后直接调用就可以了

我现在的做法是把所有组合都列出来,然后拿指定值去比较,在组合中选出最接近指定值的数。。但是这个方法只能做组合比较少的,要是组合多久麻烦了。。。
回复

使用道具 举报

16

主题

339

帖子

0

精华

高级会员

Rank: 4

积分
849
金钱
849
注册时间
2017-6-18
在线时间
166 小时
发表于 2017-10-8 09:17:15 来自手机 | 显示全部楼层
可以存到FLASH里面,这种数据一般是不会动的
回复

使用道具 举报

63

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1136
金钱
1136
注册时间
2015-11-29
在线时间
146 小时
 楼主| 发表于 2017-10-8 11:37:00 | 显示全部楼层
wlq19911021 发表于 2017-10-8 09:17
可以存到FLASH里面,这种数据一般是不会动的

这样要写很多呀,最好是用只有几个初值,后面通过计算。如果数组有8个元素,要计算它们以及它们随机几个的和与设定值的最接近值,我要把原数组扩大多少倍。。。。。
回复

使用道具 举报

16

主题

339

帖子

0

精华

高级会员

Rank: 4

积分
849
金钱
849
注册时间
2017-6-18
在线时间
166 小时
发表于 2017-10-8 17:44:43 来自手机 | 显示全部楼层
C语言没过关?不会用结构体,指针呀!
回复

使用道具 举报

63

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1136
金钱
1136
注册时间
2015-11-29
在线时间
146 小时
 楼主| 发表于 2017-10-8 18:40:48 | 显示全部楼层
wlq19911021 发表于 2017-10-8 17:44
C语言没过关?不会用结构体,指针呀!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-18 16:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表