7.10蓝桥杯刷题

奋斗吧
奋斗吧
擅长邻域:未填写

标签: 7.10蓝桥杯刷题

2023-07-14 18:23:31 96浏览

只有两种选择,一个是加入到一集合中去,一个是加入到二集合中去,结束的条件是对应下标的索引值等于A.length的时候,同时满足sum1和sum2都是偶数的情况下 count++;后序还可以考虑适当的剪枝进行优化,很巧妙的一道回溯算法的题目。

 

public class _求阶乘和 {
    public static void main(String[] args) {
        // 根据已有的知识 可以知道的是,现在要求s的末尾九位数字,已知的是39之后的阶乘他的后九位都是0;
        //所以不需要计算到2023的阶乘
        //一个数求出来的阶乘想要末尾有0
        //数中必须要有2和5,已知的2的数目应该是远大于5的,所以需要找出5的数目
        // 5 10 15 20 25 30 35 40 注意到了25里面有两个无,刚好四十的阶乘,后九位都为0;


        long ans=0;

        for (int i = 1; i <=39; i++) {
            long sum=1;

            for (int j = 1; j <=i; j++) {
                sum=j*sum;
                sum= (long) (sum%1e9);
            }
            ans+=sum;
        }
        System.out.println(ans%1000000000);
    }
}

 很巧妙的一道回溯算法的题目

class aMain {
    static int count = 0;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int T = scanner.nextInt();
        while (T-- > 0) {
            int N = scanner.nextInt();
            int[] A = new int[N];
            for (int i = 0; i < N; i++) {
                A[i] = scanner.nextInt();
            }
            count = 0;
            backtrack(A, 0, 0, 0);
            System.out.println(count % 1000000007);
        }

    }

    static void backtrack(int[] A, int index, int sum1, int sum2) {
        if (index == A.length) {
            if (sum1 % 2 == 0 && sum2 % 2 == 0) {
                count++;
            }
            return;
        }
        backtrack(A, index + 1, sum1 + A[index], sum2);

        backtrack(A, index + 1, sum1, sum2 + A[index]);
    }
}

只有两种选择,一个是加入到一集合中去,一个是加入到二集合中去,结束的条件是对应下标的索引值等于A.length的时候,同时满足sum1和sum2都是偶数的情况下 count++;

后序还可以考虑适当的剪枝进行优化,

好博客就要一起分享哦!分享海报

此处可发布评论

评论(0展开评论

暂无评论,快来写一下吧

展开评论

您可能感兴趣的博客

客服QQ 1913284695