用C语言实现排列组合,并且只能遵从题目的输出顺序。求代码。

这个可以改的话,帮忙改一下。... 这个可以改的话,帮忙改一下。 展开
 我来答
愈乐安Dc
2015-02-04
知道答主
回答量:1
采纳率:0%
帮助的人:2.1万
展开全部
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

int t=1,end1,length;
int vis[100001];

void Permutation(int a[],int m);
void my_print(int a[]);
int Factorial(int n)
{
int product=1;
if(n==0) return 1;
else
{
for(int i=1;i<=n;i++)
{
product = product*i;
}
}
return product;
}

int main()
{
t=0;
cin>>end1>>length;
memset(vis,0,sizeof(vis));
int b[end1];
Permutation(b,0);
return 0;
}

void my_print(int a[])
{

for(int i=0;i<length;i++)
printf("%d",a[i]);
printf("\n");

}

void Permutation(int a[],int m)
{

if(m == end1)
{
t++;
if(end1 == length)
{
my_print(a);
return;
}
else if(!(t%Factorial(end1-length))) //注意被除数是否为0;
{
my_print(a);
return;
}
}
else
{
for(int i=0;i<end1;i++)
{
if(vis[i] == 0)
{
vis[i]=1;
a[m] = i+1;
Permutation(a,m+1);
vis[i] = 0;
}

}
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
微俊king
2015-02-04 · TA获得超过576个赞
知道小有建树答主
回答量:626
采纳率:50%
帮助的人:563万
展开全部
#include<stdio.h>
int res[1000];
void comb(int n, int k, int start, int layer){
        int tmp;
        int i;
        if(layer > k){
                        for(i = 0; i < k; ++i)
                                printf("%d ", res[i]);
                        printf("\n");
                return;
        }
        for(tmp = start ; tmp+k-layer <= n; ++tmp){
                res[layer-1] = tmp;
                comb(n, k, tmp+1, layer+1);
        }
}
int main(){
        comb(5, 2, 1, 1);
        return 0;
}
不只要考虑两个数,多层也要考虑。
追问
晕,看不懂你的算法你能解释下吗?
追答
你可以运行一下 然后加结点 就是递归咯
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式