【暴力枚举】【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);
}
}