有趣的问题,看哪位大虾能帮忙解决下

cs676768709 2008-10-21 09:13:46
“1” 1
“2” (1+1、2)
“3” (1+1+1、1+2、3)
“4” (1+1+1+1、1+1+2、1+3、2+2、4)

大家试试用递归把1、2、3、4用上述括号表示方式给打印出来
...全文
158 点赞 收藏 19
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wanganqing 2008-10-24

package csdn;

import java.io.IOException;

public class DivedDemo {
public static void main(String[] args) throws IOException{
for(int i=1;i<=4;i++){
String str = dive(i);
System.out.println(str);
}
}
private static String dive(int a){
StringBuilder sbd = new StringBuilder();
sbd.append("\""+a+"\""+" ");
for(int i=1;i<=a;i++){
if(i!=a){
for(int j=0;j<a-i;j++){
sbd.append("1");
sbd.append("+");
}
}
sbd.append(i);
if(i!=a){
sbd.append(",");
}
}
return sbd.toString();
}
}


回复
a03180204 2008-10-22
肯定不对
鉴定完毕
回复
java__king 2008-10-22
学习.
回复
number321 2008-10-22
我居然看不懂题目......

如果把它当成找规律题的话,有人知道5这个数字,在括号里应该列出什么吗
回复
时光瞄 2008-10-22
[Quote=引用 10 楼 ZXEOC 的回复:]
其实我比较想知道如果是5的话,要求输出是什么样的,是1+2+2还是2+1+2或者是1+1+3…………?
[/Quote]

同意
回复
justinavril 2008-10-22
[Quote=引用 14 楼 zhou02607 的回复:]
- -!
懒得格式化了。。
[/Quote]
恩 改成这样就行了
 public void addTo(int base,String res,int leftValue){
if(leftValue==0){
res = res.substring(1, res.length());//加上这句就好了
System.out.println(res);
return;
}
for(int i=base;i<leftValue;i++){
addTo(i,res+"+"+(i+1),leftValue-i-1);
}
}
回复
zhou02607 2008-10-22
- -!
懒得格式化了。。
回复
justinavril 2008-10-22
回11#:
你的输出是这样的:
+1+1+1+1
+1+1+2
+1+3
+2+2

不过已经很好了 呵呵 ^_^
回复
ZXEOC 2008-10-22
好神奇啊,为什么我这里看到我的10楼排在“机器机器”的9楼上面,CSDN好神奇啊……
回复
zhou02607 2008-10-22

class Test
{
public void go(){
String res="";
addTo(0,res,4);
}
public void addTo(int base,String res,int leftValue){
if(leftValue==0){
System.out.println(res);
return;
}
for(int i=base;i<leftValue;i++){
addTo(i,res+"+"+(i+1),leftValue-i-1);
}
}
public static void main(String[] args){
Test test=new Test();
test.go();
}
}

回复
ZXEOC 2008-10-22
其实我比较想知道如果是5的话,要求输出是什么样的,是1+2+2还是2+1+2或者是1+1+3…………?
回复
zhou02607 2008-10-22

class Test
{
public void go(){
String res="";
addTo(0,res,4);
}
public void addTo(int base,String res,int leftValue){
if(leftValue==0){
System.out.println(res);
return;
}
for(int i=base;i<leftValue;i++){
addTo(i,res+"+"+(i+1),leftValue-i-1);
}
}
public static void main(String[] args){
Test test=new Test();
test.go();
}
}

回复
justinavril 2008-10-22
[Quote=引用 4 楼 ZXEOC 的回复:]
什么就肯定不对,人家只是写了一个main方法,具体算法还没实现呢,就不对
PS:1楼,你这个架子搭出来也没啥用啊……
[/Quote]
我昨晚11点回复的 没时间多想了 要早点睡觉 第二天还要上班

我感觉实现起来还是稍微有点绕的 尤其是怎么实现1+1+1+1、1+1+2、1+3、2+2这几个的位置顺序 比如我觉得前三个都比较好实现 那2+2是怎么产生的呢...
回复
lihan6415151528 2008-10-22
[Quote=引用 4 楼 ZXEOC 的回复:]
什么就肯定不对,人家只是写了一个main方法,具体算法还没实现呢,就不对
PS:1楼,你这个架子搭出来也没啥用啊……
[/Quote]

争议蛮大。学习
回复
zjx2388 2008-10-22
没琢磨出来
回复
ZangXT 2008-10-22
i=100就不要考虑递归了
回复
ZXEOC 2008-10-22
什么就肯定不对,人家只是写了一个main方法,具体算法还没实现呢,就不对
PS:1楼,你这个架子搭出来也没啥用啊……
回复
bruni 2008-10-22
[Quote=引用 1 楼 justinavril 的回复:]
这道题关键在与如何写出括号里面的内容  这么晚了  先搭个架子吧

Java code
public class SortGenerator{
public String generator(int i){
//...
return str;
}

public static void main(String args[]){

for(int i=1; i<=4; i++)
System.out.print("\""+ i +"\" (");
System.out.print(generator(i));
System.out.println(i +")");
}
}


[/Quote]

恐怕没这么简单! 如果i = 100的话...
回复
justinavril 2008-10-21
这道题关键在与如何写出括号里面的内容 这么晚了 先搭个架子吧

public class SortGenerator{
public String generator(int i){
//...
return str;
}

public static void main(String args[]){

for(int i=1; i<=4; i++)
System.out.print("\""+ i +"\" (");
System.out.print(generator(i));
System.out.println(i +")");
}
}
回复
相关推荐
发帖
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2008-10-21 09:13
社区公告
暂无公告