品质坦克基础属性总和为【12】点,各维最少【2】点 用java代码怎么实现
```java
public class IntegerPartition {
public static void main(String[] args) {
int total = 12;
int parts = 4;
int min = 2;
for (int i = min; i <= total; i++) {
for (int j = min; j <= (total - i) / 2; j++) {
System.out.printf("%d, %d\n", i, j);
}
}
}
}
```
1.互斥
资源必须处于非共享模式,即一次只有一个进程可以使用。如果另一进程申请该资源,那么必须等待直到该资源被释放为止。
2.占有并等待
一个进程至少应该占有一个资源,并等待另一资源,而该资源被其他进程所占有。
3.非抢占
资源不能被抢占。只能在持有资源的进程完成任务后,该资源才会被释放。
4.循环等待
有一组等待进程 {P0, P1,…, Pn}, P0 等待的资源被 P1 占有,P1 等待的资源被 P2 占有,…,Pn-1 等待的资源被 Pn 占有,Pn 等待的资源被 P0 占有。
我可以通过递归来实现将数字12划分为4份,且每份都不能小于2的功能,以下是具体代码实现:
public class TankAttributes {
public static void main(String[] args) {
int[] arr = new int[4];
splitNum(12, arr, 0);
}
private static void splitNum(int n, int[] arr, int index) {
if (index == 4) {
int sum = Arrays.stream(arr).sum();
if (sum == 12) {
System.out.println(Arrays.toString(arr));
}
return;
}
for (int i = 2; i <= n - (4 - index - 1) * 2; i++) {
arr[index] = i;
splitNum(n - i, arr, index + 1);
}
}
}
从代码可以看到,首先定义一个大小为4的数组存放划分结果,然后通过递归的方式对数字12进行划分,并且递归的过程中保证每份都不能小于2,结束条件是划分成4份。最后对划分结果进行求和,如果结果等于12,则输出结果。