我给你写一个,要给分的呦。代码如下:
import java.util.ArrayList;
import java.util.List;
public class Testxxx {
public void chaifen(int n){
List list = new ArrayList();
chaifendigui(n,list);
}
public void chaifendigui(int n, List list) {
// TODO Auto-generated method stub
for (int i = 1; i <= n; i++) {
System.out.print(i+" ");
if(n>i){
List list2 = new ArrayList();
list2.addAll(list);
list2.add(i);
chaifendigui(n-i,list2);
}else{
System.out.println();
for (int j = 0; j < list.size()-1; j++) {
System.out.print(list.get(j)+" ");
}
}
}
}
public static void main(String[] args) {
Testxxx xx = new Testxxx();
xx.chaifen(10);
}
}
⑵ 用java怎样将一个正整数L随机拆分成N个正整数
import java.util.Random;
public class Test {
public static void main(String[] args)throws Exception{
random(5, 100);
}
public static void random(int n, int L){
Random rand = new Random();
int temp = L;
for(int i = 0, j; i < n-1; i++){
j = rand.nextInt(temp-1) + 1;
temp -= j;
System.out.println(j);
}
System.out.println(temp);
}
}
⑶ java 中怎样拆分一个整数 并赋值给一个数组
你的意思是不是吧一个数值,拆分成很多单个的数,给你个思路,我这里没有JAVA环境
1。将这个数值用tostring方法转换成string类型
2,利用for循环,使用substring方法吧字符串分割成单个字符,循环次数可以借鉴 字符串长度-1
3.在循环内将每个字符赋给数组
..小技巧:for循环的循环条件可以从0开始,循环到字符串长度-1为止,这样的话,数组赋值就可以从相应的下标0开始了,数组的长度,自己把握,因为JAVA不支持动态数组
⑷ java将一个数按照规定拆分成几个数的和
除以7必然涉及到保留两位小数的四舍五入问题,这里使用java的BigDecimal来处理除法,四舍五入的保留方法使用RoundingMode.HALF_EVEN:
RoundingMode.CEILING:取右边最近的整数
RoundingMode.DOWN:去掉小数部分取整,也就是正数取左边,负数取右边,相当于向原点靠近的方向取整
RoundingMode.FLOOR:取左边最近的正数
RoundingMode.HALF_DOWN:五舍六入,负数先取绝对值再五舍六入再负数
RoundingMode.HALF_UP:四舍五入,负数原理同上
RoundingMode.HALF_EVEN:这个比较绕,整数位若是奇数则四舍五入,若是偶数则五舍六入
我认为无论如何都是无法避免四舍五入导致的精度变化的问题,解决方法只能在最后的结果强行再舍掉小数位数:
public class Main {
public static void main(String[] args) {
BigDecimal bigDecimal = new BigDecimal("10");
BigDecimal seven = new BigDecimal("7");
BigDecimal b1 = bigDecimal.divide(seven, 2, RoundingMode.HALF_EVEN).multiply(new BigDecimal("2"));
System.out.println(b1);
BigDecimal b2 = bigDecimal.divide(seven, 2, RoundingMode.HALF_EVEN);
System.out.println(b2);
BigDecimal b3 = bigDecimal.divide(seven, 2, RoundingMode.HALF_EVEN).multiply(new BigDecimal("2"));
System.out.println(b3);
BigDecimal b4 = bigDecimal.divide(seven, 2, RoundingMode.HALF_EVEN);
System.out.println(b4);
BigDecimal b5 = bigDecimal.divide(seven, 2, RoundingMode.HALF_EVEN);
System.out.println(b5);
System.out.println(b1.add(b2).add(b3).add(b4).add(b5).setScale(0,RoundingMode.HALF_EVEN));
}
}
⑸ 用java将一个正整数拆分成若干个正整数的和,问有多少种分法
无聊了做着玩玩,用递归法,比如2=1+1,3=1+(2的所有组成法),5需要分解1+4,2+3,因为3+2和2+3是一样的,for循环只要到i<=n/2就够了.
然后就是剔除1+1+2和1+2+1的情况,继承set的特性重写了Composition(每个拆分的方式)的equals.
懒得读取n值了,直接在main里面赋值给n
public class Composition extends ArrayList<Integer> {
@Override
public boolean equals(Object other){
Composition comp = (Composition)other;
Collections.sort(this);
Collections.sort(comp);
if(this.isEmpty() || comp.isEmpty() || this.size() != comp.size())
return false;
for(int i=0; i<this.size(); i++)
if(this.get(i) != comp.get(i))
return false;
return true;
}
@Override
public int hashCode() {
return 0;
}
}
public class main {
public static void main(String[] args) {
int n = 6;
System.out.println(toStr(calc(n)));
}
public static Set<Composition> calc(int n) {
Set<Composition> possibility = new HashSet<Composition>();
Composition composition = new Composition();
switch (n) {
case 1:
composition.add(1);
possibility.add(composition);
return possibility;
case 2:
composition.add(1);
composition.add(1);
possibility.add(composition);
return possibility;
default:
for (int i = 1; i <= n / 2; i++) {
composition = new Composition();
composition.add(i);
composition.add(n - i);
possibility.add(composition);
if (i <= n - i) {
Set<Composition> partial_pos = calc(n - i);
for (Composition pos : partial_pos) {
pos.add(i);
possibility.add(pos);
}
}
}
return possibility;
}
}
public static String toStr(Set<Composition> possibility) {
String str = "total : " + possibility.size() + "\n";
for (Composition pos : possibility)
str += toStr(pos);
return str;
}
public static String toStr(Composition composition) {
String str = composition.get(0) + "";
for (int i = 1; i < composition.size(); i++)
str += (" + " + composition.get(i));
str += "\n";
return str;
}
}
⑹ 用java怎样将一个正整数L随机拆分成N个正整数
设定先定义一个有序数组K,数组K里全是质数,然后用L做被除数,用数组K的元素依次做除数(每次整除后得到的商都继续用这个方法),直到L被完全分解,然后将这些除数存入数组N,接着用数组N里的数相乘(每个元素有且只有使用一次)得到一些乘积,将这些乘积都存入数组M。得到的数组M就是结果