该函数应采用2个参数:n
数组中整数的数量和max
,它是数组中整数的最大值(默认值为1)。此函数返回数组可能的选项数量。
例如,当n
= 3且max
= 2时
{1, 1, 1} 2. {1, 1, 2} 3. {1, 2, 2} 4. {2, 2, 2}
并且当max
= 3且n
= 2时
{1, 1} 2. {1, 2} 3. {1, 3} 4. {2, 2} 5. {2, 3} 6. {3, 3}
这是我的代码:
public class Ex14 {
public static int howManySorted(int n, int max) {
int[] myIntArray = new int[n];
fillAnArray(myIntArray, 0);
return howManySorted(myIntArray, max, 0, 1);
}
private static int howManySorted(int[] myIntArray, int max, int i, int way) {
way++;
myIntArray[i]++;
if (i < myIntArray.length - 1)
if (myIntArray[i] == max)
i++;
if (myIntArray[myIntArray.length - 1] == max) return way;
return (howManySorted(myIntArray, max, i, way));
}
//filling the array with ones for defualt way when all values equals 1
private static void fillAnArray(int[] myIntArray, int t) {
if (t == myIntArray.length)
return;
else
myIntArray[t] = 1;
fillAnArray(myIntArray, t + 1);
}
}
如果在第二个示例中使用第一个示例,它跳过一个数组,则我的代码似乎给我正确的值4。 测试人员:
public class Tester14 {
public static void main() {
System.out.println("Test: Checking method 'howManySorted' on n=3 and max=2");
System.out.println("Expected result = 4, Student result = "
+ Ex14.howManySorted(2, 3) + "\n");
}
}
答案 0 :(得分:0)
您的代码有问题
您首先递增每个单元格直到最大值
然后当您达到最大值时,您将移至数组的下一个单元格
max > 2
的每个示例都是这样
当两个单元格都需要增加时想要返回值
例如在第二项测试中,您错过了{2,2}
您的步骤是: