當前位置:首頁 » 編程語言 » c語言組合

c語言組合

發布時間: 2022-08-14 21:20:21

c語言求組合數

doublefact(longnum)
{
for(longi=1;num>0;num--)
{
i*=num;
}
}

intmain()
{
longm;
longn;
longC;

scanf("%ld%ld",&m,&n);

C=fact(n)/((fact(m))*fact(n-m));

printf("%ld",C);

return0;
}

⑵ c語言編程排列組合

void Show(int n,int len ,char str[], char p[],int *i){/*函數功能說明: 密碼窮舉法 遞歸演算法參數說明:len 密碼可選元素的個數,實際等於 strlen(str); n 密碼位數。 STR[]密碼表。 *p 密碼排列組合的臨時存檔*/int a;n--;for(a=0; a < len; a++){p[n]=str[a]; if(n==0)printf("%d:%s ",(*i)++,p); if(n0)Show(n,len , str,p,i);}} /*驅動程序 用於測試*/ int main(void){char str[]="abcdef";//密碼表 可選元素集合可根據選擇修改 int n=4;//密碼位數,根據具體應用而定。 int len=strlen(str);//用於密碼元素集合計數。 char p[20];//存放排列組合的密碼,用於輸出。 int num=0;//存放統計個數的整數值, int *i=&num;//計數器 地址。 p[n]='\0';//這個不用說啦。 printf("\n%d 位密碼,每個密碼有%d個選擇的話,共有:%d個組合。\n",n,len,*i);return 0;}
以上回答你滿意么?

⑶ 在C語言中,如何輸出一組數的排列組合

#include <stdio.h>

#include <stdlib.h>

int n = 0;

void swap(int *a, int *b)

{

int m;

m = *a;

*a = *b;

*b = m;

}

void perm(int list[], int k, int m)

{

int i;

if(k > m)

{

for(i = 0; i <= m; i++)

printf("%d ", list[i]);

printf(" ");

n++;

}

else

{

for(i = k; i <= m; i++)

{

swap(&list[k], &list[i]);

perm(list, k + 1, m);

swap(&list[k], &list[i]);

}

}

}

int main()

{

int k;//輸入自然數的個數

printf("請輸入連續自然數的個數:");

scanf("%d",&k);

int *list = (int *)malloc(k);

for (int i = 0; i < k; i ++)

{

list[i] = i + 1;

}

// int list[] = {1, 2, 3, 4, 5};

perm(list, 0, k-1);

printf("total:%d ", n);

return 0;

}

該程序的輸入為一個任意自然數n,將輸出從1到n的全排列。

(3)c語言組合擴展閱讀:

C語言的基本數的排列法

1、冒泡排序:每次相鄰兩個數比較,若升序,則將大的數放到後面,一次循環過後,就會將最大的數放在最後。

#include <stdio.h>

int main(void)

{

int a[1001];

int n,i,j,t;

scanf("%d",&n);//n為要排序的數的個數

//輸入要排序的數

for(i=0;i<n;++i)

scanf("%d",a+i);

//接下來進行排序

for(i=0;i<n-1;++i)//n個數,總共需要進行n-1次

{ //n-1個數排完,第一個數一定已經歸位

//每次會將最大(升序)或最小(降序)放到最後面

for(j=0;j<n-i-1;++j)

{

if(a[j]>a[j+1])//每次冒泡,進行交換

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}

for(j=0;j<n;++j)

printf("%-5d ",a[j]);

printf(" ");

}

return 0;

}

2、選擇排序:從第一個數開始,每次和後面剩餘的數進行比較,若升序,則如果後邊的數比當前數字小,進行交換,和後面的所有的數比較、交換後,就會將當前的最小值放在當前的位置。

#include <stdio.h>

int main(void)

{

int a[1001];

int n,i,j,t;

scanf("%d",&n);//n為要排序的數的個數

//輸入需要排序的數

for(i=0;i<n;++i)

scanf("%d",a+i);

//接下來進行排序

for(i=0;i<n-1;++i)//因為每次需要和a[i]後面的數進行比較,所以到a[n-2](倒數第2個元素)就行

{

for(j=i+1;j<n;++j)//j從i後一個開始,a[i]與a[j]進行比較

{

if(a[i]>a[j])//a[i]為當前值,若是比後面的a[j]大,進行交換

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}//每排序一次,就會將a[i](包括a[i])之後的最小值放在a[i]的位置

for(j=0;j<n;++j)

printf("%-5d",a[j]);

printf(" ");

}

return 0;

}

⑷ C語言 排列組合

發個C#的代碼:

int[] a = { 1 , 2 , 3 , 4 , 5 , 6 };
int weishu = 6;

int weishu2 = weishu - 1;
int zuida = (int)Math.Pow( 2 , weishu2 );
List<int[]> list = new List<int[]>();
for ( int i = 0 ; i < zuida ; i++ )
{
int[] b = (int[])a.Clone();
for ( int j = 0 ; j < weishu2 ; j++ )
{
int c = i >> j;
if ( (c & 1) == 1 )
{
int tmp = b[ j ];
b[ j ] = b[ j + 1 ];
b[ j + 1 ] = tmp;
}
}
list.Add( b );
}

System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.AppendLine( string.Format( "共 {0} 個結果" , list.Count ) );
foreach ( int[] aa in list )
{
for ( int i = 0 ; i < aa.Length ; i++ )
{
sb.Append( aa[ i ] );
if ( (i & 1) == 1 )
sb.Append( '\t' );
}
sb.AppendLine();
}
Console.WriteLine( sb.ToString() );

運行結果:

共 32 個結果
12 34 56
21 34 56
13 24 56
23 14 56
12 43 56
21 43 56
13 42 56
23 41 56
12 35 46
21 35 46
13 25 46
23 15 46
12 45 36
21 45 36
13 45 26
23 45 16
12 34 65
21 34 65
13 24 65
23 14 65
12 43 65
21 43 65
13 42 65
23 41 65
12 35 64
21 35 64
13 25 64
23 15 64
12 45 63
21 45 63
13 45 62
23 45 61

⑸ c語言 排列組合

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);

}

⑹ C語言中組合公式的編程

int function(int n,int m)
{
int i, ret = 1;

for(i=0;i<m;i++)
ret *= (n-i);
return ret;
}

void main(void)
{
int n = 15, m =5;
int ret;

ret = function(15,5) / function(5,5);
printf("%d\n",ret);
}

⑺ c語言 排列組合 程序演算法

#include<stdio.h>
#include<string.h>
void
Show(int
n,int
len
,char
str[],
char
p[],int
*i)
{
/*函數功能說明: 密碼窮舉法
遞歸演算法
參數說明:
len
密碼可選元素的個數,實際等於
strlen(str);
n
密碼位數。
STR[]密碼表。
*p
密碼排列組合的臨時存檔
*/
int
a;
n--;
for(a=0;
a
<
len;
a++)
{
p[n]=str[a];
if(n==0)printf("%d:%s
",(*i)++,p);
if(n>0)Show(n,len
,
str,p,i);
}
} /*驅動程序
用於測試*/
int
main(void)
{
char
str[]="abcdef";//密碼表
可選元素集合可根據選擇修改
int
n=4; //密碼位數,根據具體應用而定。
int
len=strlen(str);//用於密碼元素集合計數。
char
p[20]; //存放排列組合的密碼,用於輸出。
int
num=0;//存放統計個數的整數值,
int
*i=#//計數器
地址。
p[n]='\0';//這個不用說啦。 Show(
n,len
,str,
p
,i);
printf("\n%d
位密碼,每個密碼有%d個選擇的話,共有:%d個組合。\n",n,len,*i); return
0;
}

⑻ c語言從n個數中選m個數的組合

#include<stdio.h>

unsignedlongfactorial(intn);
unsignedlongcombination(intn,intm);
intmain(){
intn,m;
scanf("%d%d",&n,&m);
printf("combination(%d,%d)=%u ",n,m,combination(n,m));
return0;
}

unsignedlongcombination(intn,intm){
unsignedlongres=1;
res=factorial(n)/((factorial(n-m)*factorial(m)));
returnres;
}

unsignedlongfactorial(intn){
inti;
unsignedlongf=1;
for(i=1;i<=n;i++)
f*=i;
returnf;
}

⑼ C語言如何實現任意數全組合

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

#define M 10

int main()
{
int nums[M] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},i;
srand((unsigned)time(0));
for(i=1;i<=6;i++)
{
printf("%d", nums[rand()%M]);
}
getch();
}
說明一下:M是指定的數的個數,nums[]存放需要的數
你只要一運行就可以隨機抽取1-10的數字了,只要你有足夠的空間存放

⑽ C語言中怎麼組合新數字

C語言中組合新數字的方法:定義一個大一點的數組,然後把所有的數組循環賦值給你定義的這個數組就行了啊,只不過是大的這個數組的下標一直往上加。

#include<stdio.h>

int main()

{

int x[200];

int a[20],b[20],c[20];

int i=0,j;

for(j=0;j<20;j++)

x[i++]=a[j];

for(j=0;j<20;j++)

x[i++]=b[j];

for(j=0;j<20;j++)

x[i++]=c[j];

return 0;

}

其他位運算符:

1、按位或運算符「|」是雙目運算符。 其功能是參與運算的兩數各對應的二進位相或。只要對應的二個二進位有一個為1時,結果位就為1。參與運算的兩個數均以補碼出現。

2、按位異或運算符「^」是雙目運算符。 其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。

3、求反運算符~為單目運算符,具有右結合性。 其功能是對參與運算的數的各二進位按位求反。

熱點內容
xboxone絕地求生怎麼設置伺服器 發布:2025-01-20 18:22:12 瀏覽:175
編譯字母表 發布:2025-01-20 18:20:38 瀏覽:242
c語言輸入日期計算天數 發布:2025-01-20 18:11:57 瀏覽:948
sql獲取表的列名 發布:2025-01-20 18:11:54 瀏覽:860
不要做編程 發布:2025-01-20 18:11:02 瀏覽:154
安卓手機保存錄音後保存在哪裡 發布:2025-01-20 18:09:27 瀏覽:915
c語言100以內的素數之和 發布:2025-01-20 18:00:06 瀏覽:314
四川兒童醫保卡原始密碼是多少 發布:2025-01-20 17:55:32 瀏覽:309
材質包如何裝伺服器 發布:2025-01-20 17:44:24 瀏覽:530
幸運28源碼免費 發布:2025-01-20 17:44:18 瀏覽:134