c语言 排列组合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 排列组合相关的知识,希望对你有一定的参考价值。
1.有22个汉字:想恨忍真我爱你情没今世一在生活为有乐好不快过。
2.通过排列组合组成一句话。
(显然,我爱你*****…………和你爱我****…………不一样)
这个本来是一道打发时间的题目。我想用C语言把22个元素全部排列组合出来(一句话完了,打回车换行)。
随便问一下怎么才能把结果导入txt里面啊?
#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函数
以上是关于c语言 排列组合的主要内容,如果未能解决你的问题,请参考以下文章
莱布尼茨三角 与 杨辉三角 与排列组合 C=n!/[(n-m)!] . 它们三个的关系,
求多个变量的排列组合程序-C/JAVA/PHP/ASP/PYTHON均可