C++寻找数组元素组合之和为给定数
来源:互联网 发布:oracle 数据字典 编辑:程序博客网 时间:2024/05/02 02:01
问题描述:a=[2,3],b=6,将数组a中各个元素组合起来,让其和等于b。求这样的组合。
这道题很简单,组合有两种2+2+2 和 3+3
上面,是室友大半夜微信问我的一道程序题(大周五,博主正在家休息Happy —_—)。这问题很明显要用迭代。
他写的程序,只能输出2+2+2,这对组合,让我帮他改正一下。
室友程序如下:
public class DiguiNum { public static void main(String[] args) { int[] a = { 2, 3 }; int b = 6; int num = 0; String s = null; diguiArrayNum(a, b, num, s); } public static void diguiArrayNum(int[] a, int b, int num, String s) { for (int i=0; i < a.length; i++) { //相加直接大于6,跳出本次循环 if ((num + a[i]) > b) { continue; } //相加小于6 else if (num + a[i] < b) { //num计数 num = num + a[i]; if (s == null) { s = a[i] + " "; } else { s = s.concat(a[i] + " ");//字符链接在s之后 } } //等于6 else { System.out.print("["+ s + a[i] + "]"); num=0; break; } diguiArrayNum(a, b, num, s); } }}
这个迭代程序中确实有错误,有兴趣的可以先不往下看,试着找找为什么会不输出3+3这个组合。
博主对java不太熟,电脑也没安java。So,把这个程序改成了C++代码,修正后的代码如下。能 成功输入2+2+2和3+3
#include<iostream>#include<string>#include<strstream>using namespace std;void diguiArrayNum(int a[], int b, int &num, string &s){ for (int i = 0; i <2; i++) { //等于6 if (num + a[i] == b) { std::cout << "[" << s << a[i] << "]" << std::endl; s.clear(); break; } //相加直接小于6 else if (num + a[i] < b) { //num计数 num = num + a[i]; strstream ss; ss << a[i]; string s1; ss >> s1; s = s + s1 + " ";//字符链接在s之后 } //相加大于6 else if (num + a[i] > b) { num = a[i]; strstream ss; ss << a[i]; string s1; ss >> s1; s = s1 + " "; break; } diguiArrayNum(a, b, num, s); }}int main(){ int a[2] = { 2, 3 }; int b =6; int nums = 0; string s; std::cout << "b:" << b << std::endl; diguiArrayNum(a, b, nums, s); return 0;}
注意看代码,找一下差别,就明白,为没什么室友的代码输出结果不正确了(相加大于b时,室友的程序没跳出,so…..)
当b等于8时
注:虽然解决了室友的问题。但当b取有些值时,这个程序也会出错误,当b大于10时,程序会down掉,看来这个迭代程序并不通用,有兴趣的可以继续改进,精简一下代码~。(博主是懒得调试,改程序了,能懒则懒—_—)
总之,迭代真是博大精深啊~
0 0
- C++寻找数组元素组合之和为给定数
- 数组里寻找子数组元素之和为给定值sum
- 算法.给定数为数组中2个元素的之和,求出数组的下标
- 给定一个无序整形数组,找出其中所以三个数之和为0的所有组合
- 快速寻找满足条件的两个数(两数之和为给定值)
- 快速寻找数组的子集之和为固定数
- LeetCode 之 two Sum寻找两个相加之和为给定值的两个数
- 求数组中和为给定数所有的组合
- 数组两个数之和,等于给定数
- [LeetCode]—3Sum Closest 求数组中三个数之和最接近给定target的组合
- 求每个元素之和为最大的给定数组的子数组
- 找出升序数组中元素之和最接近于给定数值的两个数
- 【C++】数组中两元素之和为目标值
- 常见面试算法题:给定数组中寻找加和为特定数的两个数
- 寻找两数之和为某个值
- 判断数组中是否存在两数之和为给定值
- (leetcode)1. 查找数组中两个数之和为给定值Two Sum---Java
- 1. Two Sum 给定一个数组和一个数,输出两个和为给定数的数组元素的下标
- Android Studio无法查看源码
- 【b602】金明的预算方案
- 华为USG5500和USG6000的一些配置命令
- Effective c++ 第二章总结
- 过渡 transition
- C++寻找数组元素组合之和为给定数
- OpenCV学习笔记之 ( 三 ) MFC显示Mat图片
- Arrays的练习
- Linux用户权限
- HDFS QJM的架构设计
- Java中的BlockingQueue系列
- iOS 杂烩
- dp,px,pt,sp单位含义以及dp和px的转换
- git常用命令