我給你寫一個,要給分的呦。代碼如下:
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 一個整數平均分成N份
完全符合題意..請測試!! import java.util.*; public class Test4{ public static void main(String[] args){ System.out.println("輸入一個正整數:"); Scanner reader=new Scanner(System.in); int n = reader.nextInt(); //判斷輸入的數是否為一個正整數 if(n>0){//是正整數 System.out.println("再輸入"+n+"個正整數:"); //設輸入的第一個數為臨時最大值 int temp = reader.nextInt(); for(int i=1;itemp){//每次循環輸入的數比較,最大的值賦給temp temp=m; } } System.out.println("最大值:"+temp); }else{//不是正整數 System.out.println("您輸入的不是一個正整數!!!"); } } }
⑶ JAVA實現整數拆分演算法,例如輸入一個4會輸出4 , 3 1, 2 2, 2 1
importjava.util.Scanner;//輸入的
publicclassABS{//外面建的點java的文件名必須和這個一樣
publicstaticinta[]=newint[12000];
staticvoidp(intn,intindex)//搜索
{
inti;
if(n<=0)//當n為0的時候輸出這種情況
{
System.out.print(a[0]);
for(i=1;i<index;System.out.print("+"+a[i++]));
System.out.print(" ");
return;//返回到函數調用的地方
}
for(i=index>0&&(n>=a[index-1])?a[index-1]:n;i>0;i--)
{//如果數組下標大於0且n剩餘的值大於等於上一個的值,那麼i就等於上一個的值,否則i就等於n
a[index]=i;
p(n-i,index+1);//在次調用
}
}
publicstaticvoidmain(String[]args){
Scannerin=newScanner(System.in);//從控制台中讀取輸入數據
intt;
t=in.nextInt();//輸入一個整數
if(t>=10000)
{
System.out.println("你輸入的數據超過1萬,太大咯!!!");
return;
}
p(t,0);
in.close();//關閉輸入
return;
}
}
這個只是可以實現10000 以內的數, 如果想大一點 就把數組開大一點局可以了!
⑷ 用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將一個數按照規定拆分成幾個數的和
除以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通過鍵盤輸入一個整數,將該整數進行拆分成n位數,將每位數分別輸出.
整數的位數固定嗎?固定的話更簡單一些,
如果不固定可以先判斷輸入的樹整數,然後獲取字元串長度
for(int
i==str_len;i>1;i--){
對該數對10求余得到個位數(第二次獲得十位數)
對10求商得到剩下的幾位數
}
輸出
⑺ 用java怎樣將一個正整數L隨機拆分成N個正整數
設定先定義一個有序數組K,數組K里全是質數,然後用L做被除數,用數組K的元素依次做除數(每次整除後得到的商都繼續用這個方法),直到L被完全分解,然後將這些除數存入數組N,接著用數組N里的數相乘(每個元素有且只有使用一次)得到一些乘積,將這些乘積都存入數組M。得到的數組M就是結果
⑻ 用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對正整數分解質因數
因為你沒有加結束的條件
在函數中第一行加
if(x==0)//x==0該子問題結束
return;
遞歸兩個必須元素:
(1)遞歸終止的條件
(2)分解問題
⑽ java 中怎樣拆分一個整數 並賦值給一個數組
你的意思是不是吧一個數值,拆分成很多單個的數,給你個思路,我這里沒有JAVA環境
1。將這個數值用tostring方法轉換成string類型
2,利用for循環,使用substring方法吧字元串分割成單個字元,循環次數可以借鑒 字元串長度-1
3.在循環內將每個字元賦給數組
..小技巧:for循環的循環條件可以從0開始,循環到字元串長度-1為止,這樣的話,數組賦值就可以從相應的下標0開始了,數組的長度,自己把握,因為JAVA不支持動態數組