zoukankan      html  css  js  c++  java
  • 输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m 转载

    题目:编程求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来。

    分析:分治的思想。可以把问题(m,n)拆分(m - n, n -1)和(m, n - 1)。

    注意点:1、n大于m时,可直接从n = m出开始搜索

        2、结束条件:n < 1 || m < 1

        3、打印输出结果。注意打印输出结果并不代表函数调用结束,以n = 7 和 m = 10为例,7、3和7、2、1都是一种结果,不能得到7、3的时候终止。打印输出的条件是n = m

    程序代码如下:

    public class FindSum {
        // used as a stack to save the result
        private static LinkedList<Integer> list = new LinkedList<Integer>();
    
        public static void findSum(int sum, int n) {
            if (n < 1 || sum < 1)
                return;
            if (sum < n)
                n = sum;
            if (sum == n) {
                for (int i = 0; i < list.size(); i++)
                    System.out.print(list.get(i) + " ");
                System.out.print(sum);
                System.out.println();
            }
    
            list.addLast(n);
            findSum(sum - n, n - 1);
            list.removeLast();
            findSum(sum, n - 1);
        }
    
        public static void main(String[] args) {
            int sum = 10;
            int n = 8;
            findSum(sum, n);
        }
    }
  • 相关阅读:
    PAT 1010. 一元多项式求导 (25)
    PAT 1009. 说反话 (20) JAVA
    PAT 1009. 说反话 (20)
    PAT 1007. 素数对猜想 (20)
    POJ 2752 Seek the Name, Seek the Fame KMP
    POJ 2406 Power Strings KMP
    ZOJ3811 Untrusted Patrol
    Codeforces Round #265 (Div. 2) 题解
    Topcoder SRM632 DIV2 解题报告
    Topcoder SRM631 DIV2 解题报告
  • 原文地址:https://www.cnblogs.com/yunger/p/7550007.html
Copyright © 2011-2022 走看看