欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

c語言函數(shù)輸出全排列 c語言實(shí)現(xiàn)排序

C語言怎么實(shí)現(xiàn)有重復(fù)元素的全排列?

整體思路就是利用回溯的思想,也可認(rèn)為是深度優(yōu)先搜索

網(wǎng)頁設(shè)計(jì)是網(wǎng)站建設(shè)的前奏,好的網(wǎng)頁設(shè)計(jì)更深度的剖析產(chǎn)品和設(shè)計(jì)風(fēng)格定位,結(jié)合最新的網(wǎng)頁設(shè)計(jì)流行趨勢,與WVI應(yīng)用標(biāo)準(zhǔn),設(shè)計(jì)出具企業(yè)表現(xiàn)力,大器而深穩(wěn)的網(wǎng)站界面設(shè)。創(chuàng)新互聯(lián)公司成立于2013年,是成都網(wǎng)站建設(shè)公司:提供企業(yè)網(wǎng)站設(shè)計(jì),品牌網(wǎng)站設(shè)計(jì),營銷型企業(yè)網(wǎng)站建設(shè)方案,響應(yīng)式網(wǎng)站開發(fā),小程序開發(fā),專業(yè)建站公司做網(wǎng)站。

從字符串第一位idx=0開始,每次遞歸都從s[idx]之后選擇一個(gè)字符與s[idx]交換

因?yàn)榭赡苡兄貜?fù)字符,可使用哈希數(shù)組標(biāo)記當(dāng)前循環(huán)每個(gè)字符是否被選擇

因?yàn)樽址秶怀^ASCII碼,所以使用128空間的數(shù)組足夠用來標(biāo)記了

選擇好當(dāng)前字符s[i]并與s[idx]交換之后,遞歸調(diào)用繼續(xù)排列下一位s[idx+1]

注意這里要進(jìn)行回溯,即不選s[i]而選擇之后的某個(gè)字符交換到s[idx]

所以要將之前的s[i]與s[idx]交換過來,恢復(fù)原狀,才能循環(huán)判斷下一個(gè)選擇

具體代碼截圖如下:

運(yùn)行結(jié)果如下:

結(jié)果正確,望采納~

附源碼:

#include stdio.h

#include stdlib.h

#include string.h

#define MAXN 1000000 // 排列總數(shù)可能很多

int num = 0; // 記錄排列總數(shù)

char *res[MAXN] = {NULL}; // 指針數(shù)組保存排列結(jié)果

void swap(char *x, char *y) { // 交換兩個(gè)字符變量的內(nèi)容

char ch = *x;

*x = *y;

*y = ch;

}

void perm(char *s, int n, int idx) { // 回溯產(chǎn)生字符串全排列

if (idx == n) { // 已排列到字符串結(jié)尾

? res[num] = (char *)malloc(sizeof(char) * (n + 1));

? //printf("%s\n", s); // 輸出當(dāng)前排列

? strcpy(res[num], s); // 保存當(dāng)前排列

? num++; // 排列總數(shù)加1

? return;

}

int i, hash[128] = {0}; // 哈希數(shù)組,標(biāo)記每個(gè)字符是否被選擇

for (i = idx; i n; i++) {

? if (hash[s[i]] == 1)

? ? ? continue; // 跳過已被標(biāo)記過的重復(fù)字符

? hash[s[i]] = 1; // 選過的話在數(shù)組中標(biāo)記為1

? swap(s[idx], s[i]); // 選擇s[i]交換到s[idx]

? perm(s, n, idx + 1); // 遞歸,繼續(xù)s[idx+1]的選擇

? swap(s[idx], s[i]); // 回溯,當(dāng)前不選擇s[i],而選擇其他字符

}

}

int main() {

int n, i;

scanf("%d", n);

char *s = (char *)malloc(sizeof(char) * (n + 1));

scanf("%s", s);

perm(s, n, 0);

printf("一共有%d種排列:\n", num); // 輸出排列總數(shù)

for (i = 0; i num; i++) { // 輸出所有排列

? printf("%s\n", res[i]);

? free(res[i]); // 釋放內(nèi)存空間

}

free(s);

return 0;

}

c語言作業(yè),輸出四個(gè)數(shù)A,B,C,D的全排列

#include?iostream

#include?stdio.h

#include?algorithm

using?namespace?std;

int?main()

{

int?num[4]={1,2,3,4};

do

{

printf("%c,%c,%c,%c\n",num[0]+'A'-1,num[1]+'A'-1,num[2]+'A'-1,num[3]+'A'-1);

}while(next_permutation(num,num+4));

return?0;

}

可以借助于stl模板中的next_permutation函數(shù),這個(gè)函數(shù)是按照字典序不停的取該序列的下一個(gè)序列,直到結(jié)束。然后輸出的時(shí)候講數(shù)字轉(zhuǎn)化為你要的字母即可。

例如 第一個(gè)序列是1,2,3,4,--》A,B,C,D

C語言題,輸出全排列,寫下簡單代碼,要讓初學(xué)者看懂

我給你舉兩個(gè)簡單的列子:題目:輸入三個(gè)整數(shù)x,y,z,請把這三個(gè)數(shù)由小到大輸出。 1.程序分析:我們想辦法把最小的數(shù)放到x上,先將x與y進(jìn)行比較,如果xy則將x與y的值進(jìn)行交換,然后再用x與z進(jìn)行比較,如果xz則將x與z的值進(jìn)行交換,這樣能使x最小。 2.程序源代碼: main() { int x,y,z,t; scanf("%d%d%d",x,y,z); if (xy) {t=x;x=y;y=t;} /*交換x,y的值*/ if(xz) {t=z;z=x;x=t;}/*交換x,z的值*/ if(yz) {t=y;y=z;z=t;}/*交換z,y的值*/ printf("small to big: %d %d %d\n",x,y,z); } 題目:有1、2、3、4個(gè)數(shù)字,能組成多少個(gè)互不相同且無重復(fù)數(shù)字的三位數(shù)?都是多少? 1.程序分析:可填在百位、十位、個(gè)位的數(shù)字都是1、2、3、4。組成所有的排列后再去掉不滿足條件的排列。 2.程序源代碼: main() { int i,j,k; printf("\n"); for(i=1;i5;i++)/*以下為三重循環(huán)*/  for(j=1;j5;j++)  for (k=1;k5;k++)  { if (i!=ki!=jj!=k)  /*確保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k);  } } 你的問題很籠統(tǒng),根本就是讓人無從答起,我只是舉了其中幾個(gè)列子而已,如果你還是要執(zhí)著的話,那我的答案就是你所學(xué)的教材,你若能把你的書看懂了,你就不會在問這種問題了,

c語言 給出一個(gè)數(shù)怎樣輸出該數(shù)的全排列

C語言版:

#includestdio.h

#includestdlib.h

#includestring.h

int?a[10],?book[10],?n,?k[10],?l;

void?dfs(int?step)

{

int?i?=?0;

if(step?==?l?+?1)

{

if(a[1]?!=?0)

{

for(i?=?1;?i?=?l;?i++)

{

printf("%d",?a[i]);

}

printf("\n");

}

return?;

}

for(i?=?0;?i??l;?i++)

{

if(book[k[i]]?==?0)

{

a[step]?=?k[i];

book[k[i]]?=?1;

dfs(step?+?1);

book[k[i]]?=?0;

}

}

}

int?main(void)

{

memset(k,?0,?sizeof(k));

memset(book,?0,?sizeof(book));

int?n;

scanf("%d",?n);

char?buf[15]?=?"";

sprintf(buf,?"%d",?n);

l?=?strlen(buf);

int?i?=?0;

for(i?=?0;?i??l;?i++)

k[i]?=?buf[i]?-?'0';

dfs(1);

system("pause");//如果通不過編譯就試著刪除這句話

return?0;

}

C++版:

#includecstdio

#includecstdlib

#includecstring

int?a[10],?book[10],?n,?k[10],?l;

void?dfs(int?step)

{

if(step?==?l?+?1)

{

if(a[1]?!=?0)

{

for(int?i?=?1;?i?=?l;?i++)

{

printf("%d",?a[i]);

}

printf("\n");

}

return?;

}

for(int?i?=?0;?i??l;?i++)

{

if(book[k[i]]?==?0)

{

a[step]?=?k[i];

book[k[i]]?=?1;

dfs(step?+?1);

book[k[i]]?=?0;

}

}

}

int?main(void)

{

memset(k,?0,?sizeof(k));

memset(book,?0,?sizeof(book));

int?n;

scanf("%d",?n);

char?buf[15]?=?"";

sprintf(buf,?"%d",?n);

l?=?strlen(buf);

for(int?i?=?0;?buf[i]?!=?'\0';?i++)

k[i]?=?buf[i]?-?'0';

dfs(1);

return?0;

}

當(dāng)前名稱:c語言函數(shù)輸出全排列 c語言實(shí)現(xiàn)排序
轉(zhuǎn)載注明:http://chinadenli.net/article10/dojgodo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)標(biāo)簽優(yōu)化關(guān)鍵詞優(yōu)化Google面包屑導(dǎo)航網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)