用JAVA写一个函数,功能如下: 任意给定一组数, 找出任意数相加之后的结果为35(任意设定)的情况

用JAVA写一个函数。功能如下:任意给定一组数,例如{12,60,-8,99,15,35,17,18},找出任意数相加之后的结果为35(任意设定)的情况.

可以递归算法来解:

package test1;

import java.util.Arrays;

public class demo {

	public static void main(String[] args) {
		String str = "12,60,-8,99,15,35,17,18,8,10,11,12";
		int sum = 35;
		diguiSum(str,sum);
	}

	public static void diguiSum(String str,int sum) {
		String[] x = str.split(",");
		int[] array = arrayTransform(x);
		for (int i = 0; i < array.length; i++) {
			int[] cache = new int[i + 1];
			int ceng = -1;
			int cengQuit = i;
			int startPiont = 0;
			cir(ceng, cengQuit, startPiont, array, cache, sum);
		}
	}

	// 递归求结果
	public static void cir(int ceng, int cengQuit, int startPiont, int[] array, int[] cache, int sum) {
		ceng++;
		for (int i = startPiont; i < array.length; i++) {
			cache[ceng] = array[i];
			if (ceng == cengQuit) {
				if (getSum(cache) == sum) {
					printcache(cache);
				}
				if (getSum(cache) > sum) {
					break;
				}
			}
			if (ceng < cengQuit) {
				startPiont = i + 1;
				cir(ceng, cengQuit, startPiont, array, cache,sum);
			}
		}
	}

	// 获取组合数字之和
	public static int getSum(int[] cache) {
		int sum = 0;
		for (int i = 0; i < cache.length; i++) {
			sum = sum + cache[i];
		}
		return sum;
	}

	// 打印组合的可能
	public static void printcache(int[] cache) {
		for (int i = 0; i < cache.length; i++) {
			System.out.print(cache[i] + ",");
		}
		System.out.println();
	}

	// 转换数组类型 且为提高效率做准备
	public static int[] arrayTransform(String[] strArray) {
		int length = 0;

		int[] array = new int[strArray.length];
		for (int i = 0; i < strArray.length; i++) {
			array[i] = Integer.valueOf(strArray[i]);
		}
		Arrays.sort(array);
		for (int i = 0; i < array.length; i++) {
			if (array[i] > 35) {
				length = i;
				break;
			}
		}
		int[] dest = new int[length];
		System.arraycopy(array, 0, dest, 0, length);
		return dest;
	}
}

此算法有做适当参考。

运行结果:

用JAVA写一个函数,功能如下: 任意给定一组数, 找出任意数相加之后的结果为35(任意设定)的情况

时间: 2024-12-26 19:20:07

用JAVA写一个函数,功能如下: 任意给定一组数, 找出任意数相加之后的结果为35(任意设定)的情况的相关文章

Java面试题从零开始:写一个函数把字符串反转

前言:为了能够找一个代表我从零开始的诗词,我挖空心思去找,然而怎么也找不到一个贴合我心意的,被迫上了度娘也不曾找到.真想把小学一年级的语文课本拿出来好好的通读一遍,肯定能找到答案. 好了,既然找不到也不必耿耿于怀了.今天读了<高效能程序员的修炼>第四章,发现自己好烂,如果按照作者的看法,我是无论如何都入不了他的法眼,于是乎,我告诉自己,从零开始,把作者提出的面试题按照Java来写一遍,无论是参考别人还是自己略能想得到的办法,亲自动手把它们敲出来,并且记录下来吧! 写一个函数把字符串反转,作为本

c语言:写一个函数建立一个有3名学生数据的单向动态链表

写一个函数建立一个有3名学生数据的单向动态链表. 解:程序: #include<stdio.h> #include<stdlib.h> #define LEN sizeof(struct Student) struct Student { long num; float score; struct Student *next; }; int n; struct Student *creat(void)//定义函数返回一个指向链表头的指针 { struct Student *head

Java-集合(没做出来)第四题 (List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列。 例如: List list = new ArrayList(); list.add(“Hello”); list.add(“World”); list.add(“Learn”); //此时list 为Hello World Learn reverseL

没做出来 第四题 (List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列. 例如: List list = new ArrayList(); list.add(“Hello”); list.add(“World”); list.add(“Learn”); //此时list 为Hello World Learn reverseList(list); //调用reverseList 方法之后,list 为Learn World Hello package

用JAVA写一个视频播放器

前言 跳过废话,直接看正文 当年入坑java是因为它的跨平台优势.那时我认为,"编写一次,处处运行."这听上去多么牛逼,应该是所有语言发展的终极之道,java势必会一统天下. 然而事实证明,那时的我还是太年轻. 正所谓鱼和熊掌不可兼得,若要享受跨平台带来的方便,便不可避免地要接受性能上的不足.事实上,java一直在致力于提高虚拟机的性能(JIT等技术),但面对对实时计算性能要求很高或涉及到用硬件优化的任务(视频的硬件编码.解码)时,仍远远比不上c或c++.因此,很少能够看到有人用jav

c语言:写一个函数,输入n,求斐波拉契数列的第n项(5种方法,层层优化)

写一个函数,输入n,求斐波拉契数列的第n项. 斐波拉契数列:1,1,2,3,5,8...,当n大于等于3时,后一项为前面两项之和. 解:方法1:从斐波拉契数列的函数定义角度编程 #include<stdio.h> int fibonacci(int n) { int num1=1, num2=1, num3=0,i; if (n <= 2) { printf("斐波拉契数列的第%d项为:%d\n",n,num1); } else { for (i = 2; i <

面试题--&gt;写一个函数,返回一个数组中所有元素被第一个元素除的结果

1 package com.rui.test; 2 3 import java.util.Random; 4 5 /** 6 * @author poseidon 7 * @version 1.0 8 * @date:2015年10月25日 上午11:12:24 9 * @description: 面试题-->写一个函数,返回一个数组中所有元素被第一个元素除的结果 10 * 陷阱: 11 * 1.循环需要倒着写,为什么? 12 * 想想顺着写循环的结果,第一个元素的值会发生变化门后面再除就会有问

[编程之美]写一个函数,返回一个数组中所有元素被第一个元素除的结果

题目: 写一个函数,返回一个数组中所有元素被第一个元素除的结果: 错误的版本: void DivArray(int *array, int n) { for (int i = 0; i < n; ++i) { array[i] /= array[0]; } } 错误原因:在循环的第一步,第一个元素就变成了1,然后再用它去除以其他元素,就不符合题目要求了 改进: 1:使用其他变量保存第一个元素: void DivArray3(int *array, int n) { assert(array !=

五:用JAVA写一个阿里云VPC Open API调用程序

用JAVA写一个阿里云VPC Open API调用程序 摘要:用JAVA拼出来Open API的URL 引言 VPC提供了丰富的API接口,让网络工程是可以通过API调用的方式管理网络资源.用程序和软件管理自动化管理网络资源是一件显著提升运维效率和网络生产力的事情.产品经理教你写代码系列文章的目标是不懂代码的网络工程师能一步一步的学会用API管理网络. 另外通过文章标题大家也可以看出来,产品经理教你写代码肯定是一个业余班,里面的代码很多写的都不规范,可能也有很多Bug.专业选手可以参考的有限,请

写一个函数,输入一个数,随机生成N条邮箱

写一个函数,这个函数的功能是,传入一个数字,产生N条邮箱,产生的手机号不能重复.邮箱前面的长度是6 - 12之间,产生的邮箱必须包含大写字母.小写字母.数字和特殊字符 import random import string def email2(count): emails = set() while len(emails)!=count: email_len = random.randint(6,12) email_end = ('@163.com', '@qq.com', '@sina.co