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

这个可以改的话,帮忙改一下。

第1个回答  2015-02-04
#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;
}

}
}
}本回答被提问者采纳
第2个回答  2015-02-04
#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;
}
不只要考虑两个数,多层也要考虑。

追问

晕,看不懂你的算法你能解释下吗?

追答

你可以运行一下 然后加结点 就是递归咯

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网