• 算法基础_递归_寻找缺漏项


    题目如下(原题不是这样,我自己浓缩了下/捂脸,原题目太绕了)

    /**
     * 先输入一个数,表示和,再输入一个数,表示数据的项数,然后输入上一个数字那么多个的数字
     * 所要做的事情,在输入的数字中挑选若干个数字,这些数字的和凑成第一个数字,然后打印出每次未用到的数字
     * @author Administrator
     *
     */

    解题源代码如下:

    import java.util.Scanner;
    
    /**
     * 先输入一个数,表示和,再输入一个数,表示数据的项数,然后输入上一个数字那么多个的数字
     * 所要做的事情,在输入的数字中挑选若干个数字,这些数字的和凑成第一个数字,然后打印出每次未用到的数字
     * @author Administrator
     *
     */
    public class Demo08 {
        public static void f(int err_sum,int[] a,int ini,int cur_sum,boolean[] flag) {
            if(cur_sum>err_sum)return;
            if(cur_sum==err_sum) {
                for(int i = 0;i<a.length;i++) {
                    if(!flag[i]) {
                        System.out.print(a[i]+" ");
                    }
                }
                System.out.println();
                return;
            }
            if(ini>=a.length)return;
            flag[ini] = false;//初始化
            f(err_sum,a,ini+1,cur_sum,flag);
            flag[ini] = true;
            cur_sum+= a[ini];
            f(err_sum,a,ini+1,cur_sum,flag);
            flag[ini] = false;//回溯
        }
        
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int err_sum = sc.nextInt();
    //        int err_sum = 6;
            int size = sc.nextInt();
    //        int a[] = {3,2,1,3,4};
            int a[] = new int[size];
            for(int i = 0;i<size;i++) {
                a[i] = sc.nextInt();
            }
            boolean[] flag = new boolean[a.length];
            f(err_sum,a,0,0,flag);
        
        }
        
    }

    解题思路:

    这里说一个小技巧吧,就是递归算法在很难解决的时候,可以考虑一下增加传入参数,可能问题就迎刃而解了

    本题解决方法的主要思想就是:游标先定位在最后一个,然后一个一个往前移动,每移一次就把后面的数字在遍历一遍,如果有符合条件的,就打印出来

    如果超出了接线的,就return就好

    希望对大家有所帮助

    以上

  • 相关阅读:
    技术文章应该怎么写?
    后退时保存表单状态
    [原]长表头表格 竖直仅滚动内容区 水平滚动表头和内容区
    IE7不经提示关闭浏览器窗口
    meta 标记
    demo : 简单的 xslt 递归解析 xml 成 tree
    使用iframe和table模拟frameset的resize功能.html
    一个下划线(_)引发的"疑难杂症"
    几点小东西
    使用 ActiveReports 的 subReport 几点疑惑
  • 原文地址:https://www.cnblogs.com/lavender-pansy/p/10544628.html
Copyright © 2020-2023  润新知