【暴力枚举】【JAVA】P1149火柴棒数

思路

错误

用数组把0-9,每个数字所需要的火柴棒数保存下来,序号是数字,值是该数字需要的火柴棒数,使用双重循环遍历0-9,判断n-4-arr[i]-arr[j]==arr[i+j],但是我并没有把火柴棒组成的所有数字的表给求出来,我只遍历了0-9,所以就没有办法过全部数据。

正确做法

用数组A把0-9每个数字所需要的火柴棒数保存下来,在通过数组B去保存所有的数(由于最大24根,减去符号4根,也就是还有20根可以组成三个数,一个为0(需要6根),剩余14根可以组成的最大数为711,需要7根)对应的火柴棒数,再通过双重循环遍历判断n-4-arr[i]-arr[j]==arr[i+j] 数量,输出即可。

代码

package LOQ.暴力枚举;

import java.util.Scanner;

/**
 * @Author Lunau
 * @Create 2022-10-11 14:31
 * @Description 
 */
public class P1149火柴棒等式 {
    //索引为0-9,值为该数字需要的火柴棒数
    static  int[] arr = {6,2,5,5,4,5,6,3,7,6};
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt()-4; //剩余的火柴棒
        int[] form =  new int[1501];
        form[0] = 6;
        for (int i=1;i<1501;i++) {
            int j=i;
            //打表,求余求大于9的数的火柴棒数
            while (j>=1) {
                form[i] = form[i]+arr[j%10];
                j/=10;
            }
        }
        int count = 0;
        for (int i=0;i<=750;i++) {
            for (int j=0;j<=750;j++) {
                int res = n-form[i]-form[j];  //剩余火柴数
                if (res==form[i+j]) {
                    count++;
//                    System.out.println(i+" "+j);
                }
            }
        }
        System.out.println(count);
    }
}

你可能感兴趣的:(洛谷,java,算法,开发语言)