c语言 排列组合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 排列组合相关的知识,希望对你有一定的参考价值。

1.有22个汉字:想恨忍真我爱你情没今世一在生活为有乐好不快过。

2.通过排列组合组成一句话。

(显然,我爱你*****…………和你爱我****…………不一样)

这个本来是一道打发时间的题目。我想用C语言把22个元素全部排列组合出来(一句话完了,打回车换行)。

随便问一下怎么才能把结果导入txt里面啊?

22个汉字全排列

#include<stdio.h>
#include<stdlib.h>

#define ISPRINT
#define MAX 100

unsigned int *_NUM;
char *_NUMFLAG;

#define NUM(j) (*(_NUM+(j)))
#define NUMFLAG(j) (*(_NUMFLAG+(j)))
#define NUMUSE(j) (*(_NUMFLAG+(*(_NUM+(j)))))

void main()

char s[22][3] = "想","恨","忍","真","我","爱","你","情","没","今","世","一","在","生","活","为","有","乐","好","不","快","过";
unsigned int number = 3,j;
int i;

_NUM=(unsigned int*)malloc(sizeof(unsigned int)*number);
if(!_NUM)puts("alloc memory error.");exit(-1);
_NUMFLAG=(char*)malloc(sizeof(char)*number);
if(!_NUMFLAG)puts("alloc memory error.");exit(-1);

for(i=0;i<number;i++)NUM(i)=i,NUMFLAG(i)=1;

do

#ifdef ISPRINT
for(j=0;j<number;j++)printf("%s",s[NUM(j)]);
puts("");
#endif

NUMUSE(number-1)=0;

for(i=number-2;i>=0;i--)
NUMUSE(i)=0;
if(NUM(i)<NUM(i+1))break;


if(i<0)break;

for(j=NUM(i)+1;j<number;j++)
if(!NUMFLAG(j))break;


NUMFLAG(j)=1;
NUM(i)=j;

for(j=0,i++;i<number;j++)
if(!NUMFLAG(j))NUM(i++)=j,NUMFLAG(j)=1;
while(1);

free(_NUM);
free(_NUMFLAG);

参考资料:程序改写

参考技术A FILE *fp;
if (fp=fopen("log.txt","a")==NULL)

printf("cannot open this file\n");
exit(0);

fread(buffer,44,1,fp);
把这个加到循环里面就行了

R语言的排列组合函数Combinations函数和Permutations函数

R语言的排列组合函数Combinations函数和Permutations函数

目录

R语言的排列组合函数Combinations函数和Permutations函数

#导入combinat包

以上是关于c语言 排列组合的主要内容,如果未能解决你的问题,请参考以下文章

求C语言二维数组元素排列组合?

莱布尼茨三角 与 杨辉三角 与排列组合 C=n!/[(n-m)!] . 它们三个的关系,

求多个变量的排列组合程序-C/JAVA/PHP/ASP/PYTHON均可

R语言的排列组合函数Combinations函数和Permutations函数

排列组合

如何从一个1d Numpy数组的所有排列组合中删除所有的圆台排列组合?