ACM POJ 2245Lotto解題報告

2021-09-06 03:59:16 字數 4070 閱讀 7337

lotto

在玩德國遊戲

lotto

時,要從集合

中取出六個數。

乙個非常流行的玩法(儘管這種玩法並不能增加你贏的機會)是從這

49個數字中取出

k個數字(

6)組成子集

s。然後玩遊戲的時候僅從

s中取出數字。

例如,當

k=8,

s=1,2,

3,5,

8,13,

21,34時,有

28種可能的遊戲:

[1,2,3,5,8,13]

,[1,2,3,5,8,21]

,[1,2,3,5,8,34]

,[1,2,3,5,13,21]

,……,

[3,5,8,13,21,34]。

編乙個程式,讀入

k的值和集合

s,列印僅從

s中取數的所有可能遊戲。

輸入

輸入檔案包括乙個或多個測試情形。

每種情形一行,由多個整數組成,整數之間用空格分隔。行首整數即為k值(

6)。

接著是用於描述集合s的

k個整數,全部以公升序排列。 在

k的位置輸入零(

0)即表示輸入結束。

輸出

對於每乙個測試情形,列印出所有可能遊戲,每個遊戲一行。

每個遊戲中的數字必須以公升序排列,每兩個之間用乙個空格分隔。而這些遊戲要用類似於字典編纂的方式排序,也就是說,先對最低位排序,然後是第二低位,依次類推,就像輸出舉例中演示的那樣。

輸入樣例

7 1 2 3 4 5 6 7

8 1 2 3 5 8 13 21 34

0輸出樣例

1 2 3 4 5 6

1 2 3 4 5 7

1 2 3 4 6 7

1 2 3 5 6 7

1 2 4 5 6 7

1 3 4 5 6 7

2 3 4 5 6 7

1 2 3 5 8 13

1 2 3 5 8 21

1 2 3 5 8 34

1 2 3 5 13 21

1 2 3 5 13 34

1 2 3 5 21 34

1 2 3 8 13 21

1 2 3 8 13 34

1 2 3 8 21 34

1 2 3 13 21 34

1 2 5 8 13 21

1 2 5 8 13 34

1 2 5 8 21 34

1 2 5 13 21 34

1 2 8 13 21 34

1 3 5 8 13 21

1 3 5 8 13 34

1 3 5 8 21 34

1 3 5 13 21 34

1 3 8 13 21 34

1 5 8 13 21 34

2 3 5 8 13 21

2 3 5 8 13 34

2 3 5 8 21 34

2 3 5 13 21 34

2 3 8 13 21 34

2 5 8 13 21 34

3 5 8 13 21 34

本題就是產生組合數的方法。

#include

#include

using namespace std;

#define  maxn 20

int p[maxn];

void print(int *a,int m)  //

輸出   

//先是產生1,

2,3,

4,5,

6,7......

這樣的組合數,再利用下標輸出需要的組合數

void gencomb(int *a,int n,int m)//

產生下乙個組合數

void genallcomb(int *a,int n,int m)

}  

int main()

return 0;   

}   

(此程式在

poj上

gcc++

通不過,用

c++,accept

了。。。

奇怪了)

#include

<

stdio.h

>

#include

<

iostream

>

using

namespace

std;

#define

maxn 20

intp[maxn];

void

print(

int*

a,int

m)

//輸出

cnt=

a[m-1];

cout

<<

p[cnt]

<<

endl;

}

//先是產生1,2,3,4,5,6,7......這樣的組合數,再利用下標輸出需要的組合數

void

gencomb(

int*

a,int

n,int

m)//

產生下乙個組合數

void

genallcomb(

int*

a,int

n,int

m)

}

intmain()

return

0;

}

下面的程式是學習了網上的寫出來的,比較簡潔,推薦!!!

#include#include//memset函式標頭檔案

int k;//每一組數的個數

int num[13];

int chosed[13];

void find(int st,int n)

else printf(" %d",num[i]);

}

}printf("\n");return;

}for(i=st;i}

} int main()

return 0;

}

北大ACM poj1088 滑雪

滑雪 description michael喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長底滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 1...

Luogu P2245 星際導航

kruskal重構樹的板子題 和貨車運輸一樣滴 會的可以寫這個 我直接改的貨車運輸當時的倍增lca的 思路就是建出最小生成樹 因為顯然一些邊權很大的邊是不可能走的 然後倍增維護路徑上邊權的極值 include include include include include include inclu...

洛谷2245 星際導航

sideman做好了回到gliese 星球的硬體準備,但是sideman的導航系統還沒有完全設計好。為了方便起見,我們可以認為宇宙是一張有n 個頂點和m 條邊的帶權無向圖,頂點表示各個星系,兩個星系之間有邊就表示兩個星系之間可以直航,而邊權則是航行的危險程度。sideman 現在想把危險程度降到最小...