網頁

2014年3月7日 星期五

UVa 441 Lotto

想法:
    排列組合中的組合,因此每次挑選的時候只能比之前挑的數字還要大,用遞迴做Backtraking,詳細見底下code:

#include <cstdio>
#include <algorithm>
using namespace std;
int N, S[100], choosed[100], ans[100];
void func(int len, int pos)
{
if (len == 6){
for (int i = 0; i < 5; ++i)
printf("%d ", ans[i]);
printf("%d\n", ans[5]);
return;
}
for (int i = pos; i < N; ++i) {
if (!choosed[i]) {
choosed[i] = 1;
ans[len] = S[i];
func(len+1, i + 1);
choosed[i] = 0;
}
}
}
int main()
{
int Case = 0;
while (scanf("%d", &N) && N) {
if (Case++) printf("\n");
for (int i = 0; i < N; ++i){
scanf("%d", &S[i]);
choosed[i] = 0;
}
func(0,0);
}
}

沒有留言:

張貼留言