A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张向辉 于 2013-2-6 14:53 编辑

有道很有趣的问题:整数的分划问题。
如,对于正整数n=6,可以分划为:
6
5+1
4+2, 4+1+1
3+3, 3+2+1, 3+1+1+1
2+2+2, 2+2+1+1, 2+1+1+1+1
1+1+1+1+1+1+1
这是一道java程序设计大赛题,我看着很有意思,我只能实现部分,求高手指教,能不能给出全部可运行的程序!
补充:现在的问题是,对于给定的正整数n,编写算法打印所有划分。
用户从键盘输入 n (范围1~10)
程序输出该整数的所有划分。

4 个回复

倒序浏览
当 n = 6时, 数组arr等于 1-5,即 1,2,3,4,5

求 1,2,3,4,5 在这n-1个整数中找到相加之和为n=6的所有组合


往后又转到了这个题, 在n个整数中找到相加之和为t的所有组合 http://bbs.itheima.com/thread-37306-1-1.html
回复 使用道具 举报
本帖最后由 许晓华 于 2013-2-4 07:36 编辑

  代码见下楼

fff.jpg (14.8 KB, 下载次数: 13)

fff.jpg
回复 使用道具 举报
  1. import java.util.Scanner;
  2. public class c
  3. {
  4.         static int n;
  5.         static int []d = new int [10];
  6.         static void divide(int number,int idx)
  7.         {
  8.                 if(number==0)
  9.                 {               
  10.                         for(int i=0;i<idx;i++)
  11.                         {
  12.                                 if(i>0)
  13.                                         System.out.print("+");//输出+号
  14.                                 System.out.print(d[i]);
  15.                         }
  16.                         if(idx-1==n-d[0])
  17.                                 System.out.println();
  18.                         else
  19.                                 System.out.print(",");//输出,号
  20.                         return;
  21.                 }
  22.                 for(int i=number;i>=1;i--)//从大到小开始选数
  23.                 {
  24.                         if(idx==0||i<=d[idx-1])//用来保证右边的数不大于左边的
  25.                         {
  26.                                 d[idx]=i;
  27.                                 divide(number-i,idx+1);
  28.                         }
  29.                 }
  30.         }
  31.     public static void main(String[] args)
  32.     {
  33.             Scanner sc=new Scanner(System.in);
  34.                 while(sc.hasNextInt())
  35.                 {
  36.                         n=sc.nextInt();
  37.                         divide(n,0);//求整数n的分划
  38.                 }
  39.         }
  40. }
复制代码

点评

我们想的差不多 我今天也运行出来了 呵呵 其实我一直进入一个误区 不过今天解决了  发表于 2013-2-6 18:41

评分

参与人数 1技术分 +1 收起 理由
黄锦成 + 1 赞一个!

查看全部评分

回复 使用道具 举报
许晓华 发表于 2013-2-4 07:36

我们想的差不多 我今天也运行出来了 呵呵 其实我一直进入一个误区 不过今天解决了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马