目录
E. Good Triples
题目大意:
给你一个非负整数n,问你多少个三元组满足 a+b+c = n && dig(a) + dig(b) + dig(c) = dig(n)。
dig(n) 代表n的每位之后。(1,0,1) 和 (1,1,0)是不同的三元组。
思路:
这道题的难点在于怎么快速寻找 a b c。
第一个可以发现的规律 : 假设 n = 25,第一位为5,第2位为2,
那么a b c的第一位之和为5,第二位之和为2,那么a b c之和为n。
但是有没有可能第一位之和不为5(但他的余数为5),他的a b c之和也为n(这是存在的),但是这种情况会出现dig(a) + dig(b) + dig(c) != dig(n), 这是为什么?因为他的数位之间存在进位,这个进位的值会直接影响dig(a) + dig(b) + dig(c)的大小,然后他们取余后还等于n对应的位上的数,所以三元组应该不能存在进位情况。
则我们可以一位一位的做统计。
代码:
import java.util.Scanner;
/**
* @ProjectName: study3
* @FileName: Ex46
* @author:HWJ
* @Data: 2023/12/6 9:56
*/
public class Ex46 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int t = input.nextInt();
int[] cnt = new int[10];
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
for (int k = 0; k < 10; k++) {
if (i + j + k >= 10) continue;
cnt[i + j + k]++;
}
}
}
for (int i = 0; i < t; i++) {
int q = input.nextInt();
long ans = 1;
while (q > 0){
ans *= cnt[q % 10];
q /= 10;
}
System.out.println(ans);
}
}
}