java编程:从数组(1,2,4,6,9)中列出所有相加等于20的组合,例如9+9+2=20
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java编程:从数组(1,2,4,6,9)中列出所有相加等于20的组合,例如9+9+2=20相关的知识,希望对你有一定的参考价值。
//用个递归就行,给你个demo,拿去直接运行一下,如果有啥不懂的,留言public class Test
public static void main(String[] args)
int[] arr = 1,2,4,6,9;
List<Integer> lst = new ArrayList<Integer>();
new Test().add(arr, 20, 5, lst);
/**
* @param arr 目标数组
* @param target 需要求和的值
* @param index 这个参数最为重要,这是为了保证消除重复遍历的情况,能够极大限度减少遍历次数
* @param cur 当前保存的路径
* */
public void add(int[] arr, int target ,int index, List<Integer> cur)
if( target < getMin(arr))
return;
else
for(int i = index-1 ; i >= 0 ; i -- )
if(arr[i] == target)
for(Integer o : copyAndAdd(cur,arr[i]))
System.out.print(o + ",");
System.out.println();
//输出等于20的路径
else
add(arr, target-arr[i], i+1 , copyAndAdd(cur,arr[i]));
//深拷贝一份list,并将新的node加入路径之中
public List<Integer> copyAndAdd(List<Integer> lst, int item)
List<Integer> cur_t = new ArrayList<Integer>();
cur_t.addAll(lst);
cur_t.add(item);
return cur_t;
public int getMin(int[] arr)
int k = Integer.MAX_VALUE;
if(null == arr || arr.length < 1)
return k;
for(int i = 0; i < arr.length; i++ )
if(arr[i] < k)
k = arr[i];
return k;
参考技术A 楼上有点懵逼,没这么复杂.给你看看我这种
public class Add
public static void main(String[] args)
int [] num=new int[]1,3,5,7,9,11,13,15;
System.out.println(Arrays.toString(num));
while(true)
int num1=num[(int)(Math.random()*8)];
int num2=num[(int)(Math.random()*8)];
int num3=num[(int)(Math.random()*8)];
System.out.println(num3);
if(num1+num2+num3==30)
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println("成功");
break;
自己看着改动吧,挺简单的本回答被提问者采纳 参考技术B public class Test1
public static void main(String[] args)
int a[]=new int[]1,2,4,6,9;
for(int i=0;i<a.length;i++)
for(int j=0;j<a.length;j++)
if((a[i]+a[j])==20)
System.out.println(a[i]+"+"+a[j]);
continue;
for(int k=0;k<a.length;k++)
if((a[i]+a[j]+a[k])==20)
System.out.println(a[i]+"+"+a[j]+"+"+a[k]);
continue;
for(int l=0;l<a.length;l++)
if((a[i]+a[j]+a[k]+a[l])==20)
System.out.println(a[i]+"+"+a[j]+"+"+a[k]+"+"+a[l]);
continue;
for(int m=0;m<a.length;m++)
if((a[i]+a[j]+a[k]+a[l]+a[m])==20)
System.out.println(a[i]+"+"+a[j]+"+"+a[k]+"+"+a[l]+"+"+a[m]);
continue;
参考技术C public class Test1
public static void main(String[] args)
int[] nums = 1,2,4,6,9;
for(int i1=0;i1<nums.length;i1++)
for(int i2=0;i2<nums.length;i2++)
for(int i3=0;i3<nums.length;i3++)
if(nums[i1]+nums[i2]+nums[i3] == 20)
System.out.println(nums[i1]+","+nums[i2]+","+nums[i3]);
yii2 从一个模型获取数据数组并在另一个模型中列出
【中文标题】yii2 从一个模型获取数据数组并在另一个模型中列出【英文标题】:yii2 Getting array of data from one model and listing it in view of another 【发布时间】:2016-12-29 10:17:16 【问题描述】:在照片控制器中列出照片时,我可以使用函数获取用户数据
public function getUser()
return $this->hasOne(User::className(), ['id' => 'uID']);
所以当我在视图中列出一些照片时,我可以使用
访问用户数据库$model->user['username']
但是,如果我有这张照片的 cmets 数据库怎么办。并希望在列出照片时获得所有评论。
我应该在照片模型中写什么来获取这张照片的所有 cmets 以及如何在视图中列出它们?
在模型中我认为我必须使用这个
public function getComments()
$modelComments = Comments::find()->where(['id'=>'commentID'])->all();
return [array('modelComments' => $modelComments)];
如果这是正确的,我如何根据照片输出所有 cmets?
【问题讨论】:
【参考方案1】:$model->user['username']
是否有效?应该是$model->user->username
。
无论如何设置照片和 cmets 之间的关系,例如与用户但一对多。
public function getComments()
return $this->hasMany(Comments::className(), ['id' => 'commentID']);
现在当调用$model->comments
时,您将获得与照片相关的所有Comments
模型的数组。
显示它们的最简单方法是遍历这个数组,例如:
foreach ($model->comments as $comment)
echo $comment->content . '<br>';
// assuming column name with actual comment is "content"
【讨论】:
好的,但是你能写下我如何在照片视图中绘制这个数组的例子吗? @BizleyDoes $model->user['username'] work at all? It should be $model->user->username.
。答案是肯定的。无论如何,作为您答案的补充:@David:在获得所有 cmets 后,您只需要使用例如循环遍历 cmets foreach
.
@David 我添加了示例
非常感谢! :)以上是关于java编程:从数组(1,2,4,6,9)中列出所有相加等于20的组合,例如9+9+2=20的主要内容,如果未能解决你的问题,请参考以下文章