题目背景
猪猪 Hanke 得到了一只鸡。
题目描述
猪猪 Hanke 特别喜欢吃烤鸡(本是同畜牲,相煎何太急!)Hanke 吃鸡很特别,为什么特别呢?因为他有 10 种配料(芥末、孜然等),每种配料可以放 1 到 3 克,任意烤鸡的美味程度为所有配料质量之和。
现在, Hanke 想要知道,如果给你一个美味程度 n ,请输出这 10 种配料的所有搭配方案。
输入格式
一个正整数 n,表示美味程度。
输出格式
第一行,方案总数。
第二行至结束,10个数,表示每种配料所放的质量,按字典序排列。
如果没有符合要求的方法,就只要在第一行输出一个 0。
输入输出样例
输入 #1
11
输出 #1
10
1 1 1 1 1 1 1 1 1 2
1 1 1 1 1 1 1 1 2 1
1 1 1 1 1 1 1 2 1 1
1 1 1 1 1 1 2 1 1 1
1 1 1 1 1 2 1 1 1 1
1 1 1 1 2 1 1 1 1 1
1 1 1 2 1 1 1 1 1 1
1 1 2 1 1 1 1 1 1 1
1 2 1 1 1 1 1 1 1 1
2 1 1 1 1 1 1 1 1 1
说明/提示
对于 100%的数据,n≤5000
没什么思路可以讲的,就十层循环暴力破解,真TM失败 没事,我还能战!
唯一要说的就是,打印需要用StringBuilder承接,否则最后一组数据时间上会过不去.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
StringBuilder str = new StringBuilder();
int count = 0;
for (int a1 = 1; a1 <= 3; a1++) {
for (int a2 = 1; a2 <= 3; a2++) {
for (int a3 = 1; a3 <= 3; a3++) {
for (int a4 = 1; a4 <= 3; a4++) {
for (int a5 = 1; a5 <= 3; a5++) {
for (int a6 = 1; a6 <= 3; a6++) {
for (int a7 = 1; a7 <= 3; a7++) {
for (int a8 = 1; a8 <= 3; a8++) {
for (int a9 = 1; a9 <= 3; a9++) {
for (int a10 = 1; a10 <= 3; a10++) {
if (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 == n)
count++;
}
}
}
}
}
}
}
}
}
}
System.out.println(count);
for (int a1 = 1; a1 <= 3; a1++) {
for (int a2 = 1; a2 <= 3; a2++) {
for (int a3 = 1; a3 <= 3; a3++) {
for (int a4 = 1; a4 <= 3; a4++) {
for (int a5 = 1; a5 <= 3; a5++) {
for (int a6 = 1; a6 <= 3; a6++) {
for (int a7 = 1; a7 <= 3; a7++) {
for (int a8 = 1; a8 <= 3; a8++) {
for (int a9 = 1; a9 <= 3; a9++) {
for (int a10 = 1; a10 <= 3; a10++) {
if (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 == n)
str.append(a1).append(' ').append(a2).append(' ')
.append(a3).append(' ').append(a4).append(' ')
.append(a5).append(' ').append(a6).append(' ')
.append(a7).append(' ').append(a8).append(' ')
.append(a9).append(' ').append(a10).append('\n');
}
}
}
}
}
}
}
}
}
}
System.out.println(str);
}
}