Java 怎么使用递归或者循环输出数字 1 到 5 的所有可能性组合?
大佬们问一下,怎么使用递归或者循环输出数字1到5的所有可能性组合(如图)?急!!!java或者python都可以...
大佬们问一下,怎么使用递归或者循环输出数字 1 到 5 的所有可能性组合(如图)?急!!!java或者python都可以
展开
2个回答
展开全部
private static final int DEFAULT_MAX=5;
private static final int DEFAULT_SORT_SIZE=5;
public static void main(String[] args) {
int numbers[]={1,2,3,4,5};
for(int i=1;i<=DEFAULT_SORT_SIZE;i++){
com(numbers, i);
}
}
static void com(int numbers[],int m){
int n=numbers.length;
if(m>n) return;
int temp[]=new int[10],i,k=0;
for(i=0;i<m;i++) temp[i]=-1;
temp[k]=0;
// 核心算法
while(true){
if(temp[k]>=n)
{
if(k==0) break;
--k;
temp[k]+=1;
}
else if(k==m-1)
{
for(int j=0;j<m;j++) System.out.print(numbers[temp[j]]+" ");
System.out.println();
temp[k]+=1;
}
else{
++k;
temp[k]=temp[k-1]+1;
}
}
}
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define MAX 6
/*
将数字1,2,3,4,5的组合全部输出,每个数字仅能出现一次
*/
void DFS(int *output, int val, int pos, bool *isSelected)
{
if(isSelected[val]) // if this number is exist, return
return ;
output[pos] = val;
isSelected[val] = true; // save the scene
if(pos == MAX-2)
{
for(int i=0; i<MAX-1; i++)
printf("%d ", output[i]);
printf("/n");
isSelected[val] = false; // recover the scene, one way to end this DFS function
return ;
}
for(int i=1; i <MAX; i++)
{
DFS(output, i, pos+1, isSelected);
}
isSelected[val] = false; // recover the scene, another way to end this DFS function
}
int main()
{
bool isSelected[MAX];
int output[MAX];
for(int i=1; i<MAX; i++)
{
memset(isSelected, false, sizeof(isSelected));
DFS(output, i, 0, isSelected);
}
system("pause");
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询