⑴ 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=#//計數器 地址。
p[n]='\0';//這個不用說啦。
printf("\n%d 位密碼,每個密碼有%d個選擇的話,共有:%d個組合。\n",n,len,*i);return 0;}
以上回答你滿意么?
⑵ 用C語言編程求1234四個數能組成多少互不相同且不重復的三位數
三位數有三個位置,每一個位置看作一個變數,假設為i、j、k,
互不相同且不重復的三位數,即i不等於j且j不等於k且i不等於j,用C語言邏輯表達式描述為:
i!=j&&j!=k&&i!=k
三個位置,每一個位置有1、2、3、4,四種可選值,因此其排列數為4^3 = 64種排列組合方法,三個位置互不相同,按分步乘法原理得一共有4x3x2 = 24種排列方法。編寫示例代碼如下:
#include<stdio.h>
intmain()
{
inti,j,k,n=0;//n用於統計個數
for(i=1;i<5;i++)
for(j=1;j<5;j++)
for(k=1;k<5;k++)
//保證三位數不重復
if(i!=j&&i!=k&&j!=k)
{
n++;
printf("%d%d%d",i,j,k);
if(n%4==0)
printf(" ");
}
printf(" 一共:%d ",n);
return0;
}