【面试系列】编写一个程序,列出1-19所有相加为20的组合
2013-11-01 19:35
176 查看
同样是联德威的一道面试题,题不难,递归一下。
运行结果为:
[1,2,3,4,10]=20
[1,2,3,5,9]=20
[1,2,3,6,8]=20
[1,2,3,14]=20
[1,2,4,5,8]=20
[1,2,4,6,7]=20
[1,2,4,13]=20
[1,2,5,12]=20
[1,2,6,11]=20
[1,2,7,10]=20
[1,2,8,9]=20
[1,2,17]=20
[1,3,4,5,7]=20
[1,3,4,12]=20
[1,3,5,11]=20
[1,3,6,10]=20
[1,3,7,9]=20
[1,3,16]=20
[1,4,5,10]=20
[1,4,6,9]=20
[1,4,7,8]=20
[1,4,15]=20
[1,5,6,8]=20
[1,5,14]=20
[1,6,13]=20
[1,7,12]=20
[1,8,11]=20
[1,9,10]=20
[1,19]=20
[2,3,4,5,6]=20
[2,3,4,11]=20
[2,3,5,10]=20
[2,3,6,9]=20
[2,3,7,8]=20
[2,3,15]=20
[2,4,5,9]=20
[2,4,6,8]=20
[2,4,14]=20
[2,5,6,7]=20
[2,5,13]=20
[2,6,12]=20
[2,7,11]=20
[2,8,10]=20
[2,18]=20
[3,4,5,8]=20
[3,4,6,7]=20
[3,4,13]=20
[3,5,12]=20
[3,6,11]=20
[3,7,10]=20
[3,8,9]=20
[3,17]=20
[4,5,11]=20
[4,6,10]=20
[4,7,9]=20
[4,16]=20
[5,6,9]=20
[5,7,8]=20
[5,15]=20
[6,14]=20
[7,13]=20
[8,12]=20
[9,11]=20
public class Test02 { static int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }; private static void count(int index, int value, String str, int sum) { for (int i = index; i < array.length; i++) { if ((value - array[i]) == 0)// 找到一个组合 { if ((sum - array[i]) == 0) { System.out.println("["+str + "" + array[i]+"]=20"); } } else if ((value - array[i]) > 0)// 继续找 { str += array[i] + ","; sum = sum - array[i]; for (int j = i + 1; j < array.length; j++) count(j, value - array[i], str, sum); } } } public static void main(String[] args) { for (int i = 0; i < array.length; i++) { count(i, 20, "", 20); } } }
运行结果为:
[1,2,3,4,10]=20
[1,2,3,5,9]=20
[1,2,3,6,8]=20
[1,2,3,14]=20
[1,2,4,5,8]=20
[1,2,4,6,7]=20
[1,2,4,13]=20
[1,2,5,12]=20
[1,2,6,11]=20
[1,2,7,10]=20
[1,2,8,9]=20
[1,2,17]=20
[1,3,4,5,7]=20
[1,3,4,12]=20
[1,3,5,11]=20
[1,3,6,10]=20
[1,3,7,9]=20
[1,3,16]=20
[1,4,5,10]=20
[1,4,6,9]=20
[1,4,7,8]=20
[1,4,15]=20
[1,5,6,8]=20
[1,5,14]=20
[1,6,13]=20
[1,7,12]=20
[1,8,11]=20
[1,9,10]=20
[1,19]=20
[2,3,4,5,6]=20
[2,3,4,11]=20
[2,3,5,10]=20
[2,3,6,9]=20
[2,3,7,8]=20
[2,3,15]=20
[2,4,5,9]=20
[2,4,6,8]=20
[2,4,14]=20
[2,5,6,7]=20
[2,5,13]=20
[2,6,12]=20
[2,7,11]=20
[2,8,10]=20
[2,18]=20
[3,4,5,8]=20
[3,4,6,7]=20
[3,4,13]=20
[3,5,12]=20
[3,6,11]=20
[3,7,10]=20
[3,8,9]=20
[3,17]=20
[4,5,11]=20
[4,6,10]=20
[4,7,9]=20
[4,16]=20
[5,6,9]=20
[5,7,8]=20
[5,15]=20
[6,14]=20
[7,13]=20
[8,12]=20
[9,11]=20
相关文章推荐
- (面试)编写一个程序,列出1-19所有相加为20的组合
- 有一个纯字符串,编写一段代码,列出其所有字符的大小写组合 如 :字符串“ji”,字母组合['ji','jI','Ji','JI'] 即每个字符的大小写组合
- java求1至19这些自然数数中,所有相加为20的组合
- java编程:从数组(1,2,4,6,9)中列出所有相加等于20的组合,例如9+9+2=20
- 19. 中兴面试题:输入两个整数n和m, 从数列1,2,...,n中任意选择几个数,使其和等于m, 要求编写程序输出所有的组合
- 编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现。
- 编写一个程序,实行两个时间相加
- 编写一个程序,要求用户输入最多10个高尔夫成绩,并将其存储在一个数组中。 程序允许用户提早结束输入,并在一行上显示所有成绩,然后报告平均成绩。 请使用3个数组处理函数来分别进行输入、显示和计算
- 编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现
- 编写一个删除C语言程序中所有注释语句的程序
- 输入两个整数n和m, 从数列1,2,...,n中任意选择几个数,使其和等于m, 要求编写程序输出所有的组合
- 编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现
- 编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现。
- 关于存在一个正整数n,使得大于n的整数都能由6、9、20相加组合而成的证明
- C语言:编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是 100 的程序,并输出所有的可能性
- 编写一个C程序删除一个文件的所有注释
- C语言程序设计习题1-17 编写一个程序,打印长度大于80个字符的所有输入行
- 输出一个整数的每一位,计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,编写程序数一下 1到 100 的所有整数中出现多少次数字 9
- 编写一个程序,实行两个复数相加