小算法:获得一个数的所有可能性组合
来源:互联网 发布:json在线编辑器 编辑:程序博客网 时间:2024/05/22 00:09
来自微信群发来的问题:
2 ,3,4,6怎么能算出24来,谁能想出4种来?
当然我就小动手了一下:
首先获取所有数字排列方式, 原理就是每个位置和其他位置都不重复
float poolBase[] = {4,6,2,3}; float pool[4]; int count =0; for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ if(j==i)continue; for(int m=0;m<4;m++){ if(m==i||m==j)continue; for(int n=0;n<4;n++){ if(n==i||n==j||n==m)continue; pool[0] = poolBase[i]; pool[1] = poolBase[j]; pool[2] = poolBase[m]; pool[3] = poolBase[n];// printf("%.0f%.0f%.0f%.0f\n",pool[i],pool[j],pool[m],pool[n]);
然后遍历各种算法组合并计算是否得到24
const char* pool2[]={"+","-","*","/"};int pos[]={0,0,0};while (true) { if (pos[0]>=3 && pos[1]>=3 && pos[2]>=3) { break; } stringstream ss; float sum = pool[0]; ss<<pool[0]; for (int x=0; x<3; x++) { ss<<pool2[pos[x]]; switch (pos[x]) { case 0: sum+=pool[x+1]; break; case 1: sum-=pool[x+1]; break; case 2: sum*=pool[x+1]; break; case 3: sum/=pool[x+1]; break; default: break; } ss<<pool[x+1]; } pos[2]+=1; if (pos[2]>3) { pos[1]+=1; pos[2]=0; if (pos[1]>3) { pos[0]+=1; pos[1]=0; } } if (sum==24) { count++; printf("24 = %s \n",ss.str().c_str()); }}
再把上面遍历的排序放置进检测可能组合的算法中:
得到了18种组合
24 = 4+6-2*3
24 = 4-2+6*3
24 = 4/2+6*3
24 = 4+2*3+6
24 = 6+4-2*3
24 = 6-2+4*3
24 = 6*2-4*3
24 = 6/2+3*4
24 = 6-3*4*2
24 = 6*3+4+2
24 = 6-3*2*4
24 = 6*3+2+4
24 = 2+4*3+6
24 = 2*6-4*3
24 = 3*6+4+2
24 = 3*6+2+4
24 = 3-2*4*6
24 = 3-2*6*4
count = 18
整个群都不说话了, 不知道为啥
0 0
- 小算法:获得一个数的所有可能性组合
- 编程算法 - 计算一个数的所有组合数 代码(C++)
- 编程算法 - 计算一个数的所有组合数 代码(C++)
- 算法题33 从一个序列中选出所有前面的数大于后面的数的组合
- 简单的一个求所有组合数的代码
- 求能组成一个数的所有组合
- [面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合
- [面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合
- 求一个序列的所有组合的算法
- 用JAVA编写一个算法实现对一个字符数组的所有元素的所有组合
- 求两个数的和等于一个数的所有组合
- 求一个整数的组合数算法(java)
- C算法-求组合排列可能性
- 求一组数的组合的和为一个值的所有情况
- 求一组数的所有组合。
- 计算组合数的算法
- 一个排好序的数组,找出两数之和为M的所有组合
- 一个排好序的数组,找出两数之和为m的所有组合
- TOYS(水解析)
- Python使用mechanize模拟登录、抓取数据的代码
- Delphi IDHTTP用法详解
- 12.3.19 fields ——elasticsearch中文文档
- C++Const
- 小算法:获得一个数的所有可能性组合
- fresco解析之Hierarchy
- UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-78: ordinal not in range(128
- 基于消息的分布式架构
- 使用PagerTabStrip配合ViewPager实现左右滑动标题栏的效果
- 免费的 Bootstrap 的后台管理模板
- 【小白学OpenCV】(零)——计算机图像基础
- 海湾国家
- onvif学习笔记5:onvif框架代码初步了解