免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: 54nwq
打印 上一主题 下一主题

[数值计算] 求教用awk怎样凑数字 [复制链接]

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
31 [报告]
发表于 2015-03-03 17:08 |只看该作者
回复 26# reyleon

I just like to programming and develop the test program many years.

论坛徽章:
0
32 [报告]
发表于 2015-03-03 17:09 |只看该作者
。。路过同等

论坛徽章:
9
射手座
日期:2014-07-29 13:05:07双子座
日期:2015-01-11 17:01:522015年亚洲杯之朝鲜
日期:2015-02-01 16:14:282015亚冠之阿尔艾因
日期:2015-06-04 17:54:40数据库技术版块每日发帖之星
日期:2015-08-02 06:20:00数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-11-26 06:20:0015-16赛季CBA联赛之天津
日期:2016-06-20 17:09:2015-16赛季CBA联赛之青岛
日期:2017-02-26 15:54:19
33 [报告]
发表于 2015-03-03 17:36 |只看该作者
看了jason大神的回帖,都不敢在论坛说话了

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
34 [报告]
发表于 2015-03-03 18:46 |只看该作者
本帖最后由 zsszss0000 于 2015-03-03 18:49 编辑

受6楼启发
  1. #include<iostream>
  2. #include<fstream>
  3. #include<vector>
  4. #include <cmath>
  5. using namespace std;

  6. int main()
  7. {
  8.         vector<float> mydata;
  9.         vector<int>  alph;
  10.         float a=0;
  11.         float sum=0;
  12.         int i;
  13.         int k;
  14.         vector<float>::iterator di;///<mydata迭代器
  15.         vector<int>::iterator ai;///<alph迭代器
  16.         ifstream infile("save.txt");

  17.         while(infile>>a)
  18.         {
  19.                 /*填充vector*/
  20.                 mydata.push_back(a);
  21.                 alph.push_back(0);
  22.         }

  23.         int num=mydata.size();
  24.         cout<<"the num of data is "<<num<<endl;
  25.         cout<<"the num of alph is "<<alph.size()<<endl;

  26.         for(di=mydata.begin();di!=mydata.end();di++)
  27.         {
  28.                 cout<<*di<<endl;
  29.         }

  30.         for(ai=alph.begin();ai!=alph.end();ai++)
  31.         {
  32.                 cout<<*ai<<endl;
  33.         }
  34.         for(k=0;k<pow(2,num);k++)
  35.         {

  36.                 for(i=0,ai=alph.begin();ai!=alph.end();ai++,i++)
  37.                 {
  38.                         int kk=k/pow(2,i);
  39.                         *ai=kk%2;
  40.                 }
  41.                
  42.                 sum=0;
  43.                 for(di=mydata.begin(),ai=alph.begin();ai!=alph.end();ai++,di++)
  44.                 {
  45.                         sum+=(*ai)*(*di);
  46.                 }

  47.                 cout<<"sum is "<<sum<<endl;
  48.                 if(abs(sum-275.32)<0.001)
  49.                 {
  50.                         cout<<"got one:";
  51.                         cout<<"the sum is "<<sum;
  52.                        
  53.                         for(ai=alph.begin(),di=mydata.begin();ai!=alph.end();ai++,di++)
  54.                         {
  55.                                 if((*ai)==1)
  56.                                 {
  57.                                         cout<<(*di)<<"  ";
  58.                                 }
  59.                         }
  60.                         cout<<endl;
  61.                 }
  62.         }
  63. }
复制代码
闲的慌,用C++实现了下,思路是遍历,效率比较低。

最终得到的结果是:
  1.   1 got one:the sum is 275.3243.11  38.59  64.04  66.61  54.99  3.23  4.75                                                                     
  2.   2 got one:the sum is 275.3288  7.22  95.09  4.75  80.26
  3.   3 got one:the sum is 275.327.22  38.59  64.04  54.99  54.77  34.83  3.23  4.75  12.9
  4.   4 got one:the sum is 275.3256.27  88  7.22  38.59  3.23  4.75  77.26
  5.   5 got one:the sum is 275.3256.27  88  4.77  38.59  54.77  4.75  28.17
  6.   6 got one:the sum is 275.3243.11  64.04  54.99  4.75  80.26  28.17
  7.   7 got one:the sum is 275.3243.11  7.22  4.77  38.59  64.04  34.83  4.75  78.01
  8.   8 got one:the sum is 275.3243.11  56.27  4.77  80.26  12.9  78.01
  9.   9 got one:the sum is 275.3243.11  64.04  12.9  77.26  78.01
  10. 10 got one:the sum is 275.3243.11  7.22  64.04  54.77  28.17  78.01
  11. 11 got one:the sum is 275.3256.27  88  7.22  4.75  12.9  28.17  78.01
  12. 12 got one:the sum is 275.3288  7.22  38.59  54.99  4.75  12.9  68.87
  13. 13 got one:the sum is 275.3238.59  64.04  54.77  3.23  4.75  12.9  28.17  68.87
  14. 14 got one:the sum is 275.327.22  54.99  34.83  3.23  28.17  78.01  68.87
  15. 15 got one:the sum is 275.3238.59  66.61  54.77  3.23  28.17  83.95
  16. 16 got one:the sum is 275.324.77  38.59  34.83  4.75  80.26  28.17  83.95
  17. 17 got one:the sum is 275.3243.11  4.77  34.83  3.23  77.26  28.17  83.95
  18. 18 got one:the sum is 275.3256.27  34.83  3.23  28.17  68.87  83.95
  19. 19 got one:the sum is 275.3243.11  56.27  7.22  66.61  54.99  34.83  12.29
  20. 20 got one:the sum is 275.3243.11  95.09  66.61  54.99  3.23  12.29
  21. 21 got one:the sum is 275.3256.27  7.22  4.77  54.99  54.77  4.75  80.26  12.29
  22. 22 got one:the sum is 275.3256.27  88  38.59  64.04  3.23  12.9  12.29
  23. 23 got one:the sum is 275.327.22  95.09  54.99  54.77  34.83  3.23  12.9  12.29
  24. 24 got one:the sum is 275.3243.11  56.27  88  54.77  3.23  4.75  12.9  12.29
  25. 25 got one:the sum is 275.327.22  64.04  54.99  54.77  4.75  77.26  12.29
  26. 26 got one:the sum is 275.3256.27  38.59  54.99  4.75  80.26  28.17  12.29
  27. 27 got one:the sum is 275.3243.11  56.27  54.99  3.23  77.26  28.17  12.29
  28. 28 got one:the sum is 275.3243.11  7.22  4.77  54.77  34.83  12.9  77.26  28.17  12.29
  29. 29 got one:the sum is 275.3243.11  7.22  4.77  95.09  34.83  78.01  12.29
  30. 30 got one:the sum is 275.3256.27  38.59  12.9  77.26  78.01  12.29
  31. 31 got one:the sum is 275.3256.27  7.22  38.59  54.77  28.17  78.01  12.29
  32. 32 got one:the sum is 275.324.77  38.59  95.09  34.83  3.23  4.75  12.9  68.87  12.29
  33. 33 got one:the sum is 275.3243.11  56.27  66.61  28.17  68.87  12.29
  34. 34 got one:the sum is 275.3256.27  7.22  54.77  34.83  12.9  28.17  68.87  12.29
  35. 35 got one:the sum is 275.3295.09  54.77  3.23  12.9  28.17  68.87  12.29
  36. 36 got one:the sum is 275.3243.11  34.83  3.23  4.75  80.26  12.9  83.95  12.29
  37. 37 got one:the sum is 275.3243.11  7.22  38.59  12.9  77.26  83.95  12.29
  38. 38 got one:the sum is 275.3243.11  54.99  3.23  4.75  12.9  77.26  79.08
  39. 39 got one:the sum is 275.327.22  38.59  64.04  54.99  3.23  28.17  79.08
  40. 40 got one:the sum is 275.3243.11  7.22  54.99  54.77  3.23  4.75  28.17  79.08
  41. 41 got one:the sum is 275.327.22  38.59  54.77  4.75  12.9  78.01  79.08
  42. 42 got one:the sum is 275.3243.11  66.61  4.75  12.9  68.87  79.08
复制代码

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
35 [报告]
发表于 2015-03-03 19:18 |只看该作者
回复 1# 54nwq

感觉是个背包问题?
我算法没学好啊...不会高效的...
   

论坛徽章:
14
15-16赛季CBA联赛之辽宁
日期:2019-06-16 15:47:3515-16赛季CBA联赛之广夏
日期:2016-08-13 21:24:352015亚冠之武里南联
日期:2015-07-07 17:37:372015亚冠之萨济拖拉机
日期:2015-07-06 17:07:482015亚冠之全北现代
日期:2015-06-04 13:54:272015亚冠之城南
日期:2015-05-21 15:43:212015年亚洲杯之伊朗
日期:2015-04-25 18:20:362015年亚洲杯之伊朗
日期:2015-04-20 16:06:052015年亚洲杯之科威特
日期:2015-03-07 12:51:26丑牛
日期:2014-12-30 10:26:38申猴
日期:2014-09-28 22:40:18金牛座
日期:2014-09-13 21:12:22
36 [报告]
发表于 2015-03-04 13:16 |只看该作者
本帖最后由 reb00t 于 2015-03-04 21:54 编辑

此题可以来个python版本~
  1. #!/usr/bin/env  python
  2. import itertools

  3. fname = "1"
  4. data = []
  5. VALUE = 275.32
  6. t = 0


  7. with open(fname) as fs:
  8.         for line in fs:
  9.             l = float(line.strip())
  10.             data.append(l)

  11. for i in range(2,len(data)):
  12.     for m in itertools.combinations(data, i):
  13.         if str(sum(m))[:6] == str(VALUE):
  14.             t = t + 1
  15.             print  data

  16. print t
复制代码

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
37 [报告]
发表于 2015-03-08 17:34 |只看该作者
@jason680
$ cat test
4
5
6
7

$ time awk -vv=18 'function x(v,s,c,t,p,y){if(t>v)return;if(s-c>1)while(++p<=NR-s+c)x(v,s,c+1,t+a[p],p,y a[p]"("p")+");else{while(++p<=NR){if(v==t+a[p]){cnt++;print v"="y a[p]"("p")"}}}}{a[NR]=$1;N=NR;if(NR==1)max=min=$1;if(max<$1)max=$1;if(min>$1)min=$1;printf $1"("NR"), "}END{print "\nv="v", max="max", min="min;for(n=2;n<=NR;n++)x(v,n);print "got total:"cnt}' test
4(1), 5(2), 6(3), 7(4),
v=18, max=7, min=4
got total:

real        0m0.004s
user        0m0.001s
sys        0m0.003s
$ time awk -vv=18 'function x(v,s,c,t,p,y){if(t>v)return;if(s-c>1)while(++p<=NR-s+c+1)x(v,s,c+1,t+a[p],p,y a[p]"("p")+");else{while(++p<=NR){if(v==t+a[p]){cnt++;print v"="y a[p]"("p")"}}}}{a[NR]=$1;N=NR;if(NR==1)max=min=$1;if(max<$1)max=$1;if(min>$1)min=$1;printf $1"("NR"), "}END{print "\nv="v", max="max", min="min;for(n=2;n<=NR;n++)x(v,n);print "got total:"cnt}' test
4(1), 5(2), 6(3), 7(4),
v=18, max=7, min=4
18=5(2)+6(3)+7(4)
got total:1

real        0m0.002s
user        0m0.002s
sys        0m0.000s

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
38 [报告]
发表于 2015-03-09 11:16 |只看该作者
回复 37# cao627

thank you
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP