看到一个求1到19中相加等于20的数,问题解决了,求此贴!

valenon 2011-12-13 10:06:01
RT
...全文
232 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
keeya0416 2011-12-13
  • 打赏
  • 举报
回复
如果1-19的数不能重复使用就0-1背包
可重复使用就完全背包
OPPPPOP 2011-12-13
  • 打赏
  • 举报
回复
不知道那个贴 发个例子 不晓得是不是LZ想要的
		final int num=20;
int[] stack=new int[6];
for(int x=1,pos=0,sum=0;x<num;x++){
stack[pos++]=x;
sum+=x;
if(sum<num){
continue;
}
if(sum==num){
for(int i=0;i<pos;i++){
System.out.print(stack[i]+"+");
}
System.out.println();
}
sum-=stack[--pos];
sum-=stack[--pos];
x=stack[pos];
}

mengyalizuopeng 2011-12-13
  • 打赏
  • 举报
回复
for(int i =1 ;i<20;i++){
for(int j=1;j<20;j++){
if(i < j && i+j==20){
System.out.println(i +" + " + j);
}
}
}
valenon 2011-12-13
  • 打赏
  • 举报
回复
我这有个回溯算法。
public static void main(String[] args) {
// TODO Auto-generated method stub
divide(20,1,"");
}

private static void divide(int target,int start,String prefix) {

String steady = prefix;
while(start < (target + 1)/2){
int d = target - start;
System.out.println(prefix.toString() + start + " " + d);
if(d >= start * 2 + 3){
prefix += start + " ";
divide(d,start + 1,prefix);
}
start ++;
prefix = steady;
}
}
valenon 2011-12-13
  • 打赏
  • 举报
回复
谢谢大家,我只是偶尔看到了那么一篇帖子,想在这讨论一下。
本题要求是1-19所有相加可以得20的数,并不止两个数相加,如,1,2,17也是一种组合。
数字不重复,目前二楼的是正确的,但还没看明白,再看看。。

3楼的背包算法是怎么样的,能不能贴段代码?大家讨论
malipeng0086 2011-12-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 malipeng0086 的回复:]

Java code

public void f()
{
int i = 19;
for(;i > 10; i--)
{
System.out.println(i + " " + (20 - i));
}
}
[/Quote]

看来我太肤浅了……
malipeng0086 2011-12-13
  • 打赏
  • 举报
回复

public void f()
{
int i = 19;
for(;i > 10; i--)
{
System.out.println(i + " " + (20 - i));
}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧