c语言编程数字字母排列组合,如何编程实现排列组合
怎么編程實現排列組合?
例如
編程實現從5人里面隨機選3個人出來。有多少種不同的選法?
該如何編寫?
需要用到?頭文件MATH.H嗎,若不用到該怎么寫?
謝謝!
------解決方案--------------------
#include?
int?main()
{
int?i,?j,?k;
for?(i?=?1;?i?<=?5;?i++)?{
for?(j?=?1;?j?<=?5;?j++)?{
if?(j?==?i)?continue;
for?(k?=?1;?k?<=?5;?k++)?{
if?(k?==?i
------解決方案--------------------
k?==?j)?continue;
printf("i?=?%d,?j?=?%d,?k?=?%d\n",?i,?j,?k);
}
}
}
return?0;
}
------解決方案--------------------
#include?
#include?
#define?MAX_NUM?26
int?comb[MAX_NUM];
int?c1,c2;
void?combination(int?m,int?n)?{
int?i,j;
for?(i=m;i>=n;i--)?{
comb[n]=i;?/*?選擇當前的“頭”元素?*/
if?(n>1)?{
combination(i-1,n-1);?/*?進入下一次更小的組合問題?*/
}?else?{?/*?滿了需要的組合數,輸出?*/
for?(j=comb[0];j>0;j--)?printf("%c",'A'+c1-comb[j]);
printf("\n");
}
}
return;
}
int?main(int?argc,char?**argv)?{
if?(argc<3)?{
printf("%s?組合下標?組合上標\n",argv[0]);
return?1;
}
c1=atoi(argv[1]);
if?(c1<1
------解決方案--------------------
MAX_NUM
printf("1<=組合下標<=%d\n",MAX_NUM);
return?2;
}
c2=atoi(argv[2]);
if?(c2<1
------解決方案--------------------
c1
printf("1<=組合上標<=組合下標\n");
return?3;
}
comb[0]=c2;
combination(c1,c2);
return?0;
}
------解決方案--------------------
“給定一個小點的輸入,完整單步跟蹤(同時按Alt+7鍵查看Call?Stack里面從上到下列出的對應從里層到外層的函數調用歷史)一遍。”是理解遞歸函數工作原理的不二法門!
遞歸函數關注以下幾個因素
·退出條件
·參數有哪些
·返回值是什么
·局部變量有哪些
·全局變量有哪些
·何時輸出
·會不會導致堆棧溢出
------解決方案--------------------
//qplw.cpp
#include?
#include?
#include?
int?v=0;
int?w=0;
int?m;//記錄字符串長度
int?n;//記錄字符串中的字符種類數
char?map[256];//記錄是哪幾種字符
int?count[256];//記錄每種字符有多少個
int?stack[1000];//遞歸用的棧,并記錄當前生成的排列
void?Make_Map(char?*str)?{//統計字符串的相關信息
int?s[256];
int?i;
memset(s,0,sizeof(s));
memset(count,0,sizeof(count));
m=strlen(str);
if?(w<1
------解決方案--------------------
m
while(*str)?{
s[*str]++;
str++;
}
n=0;
for?(i=0;i<256;i++)
if?(s[i])?{
map[n]=i;
count[n]=s[i];
n++;
}
}
void?Find(int?depth)?{//遞歸式回溯法生成全排列
if?(depth==w)?{
int?i;
for?(i=0;i
總結
以上是生活随笔為你收集整理的c语言编程数字字母排列组合,如何编程实现排列组合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: moviepy音视频开发:音频合成类Co
- 下一篇: ROS部署乐视奥比中光(astra pr