最白爛的方法就是用6個for去寫!
不過如果會用6個for了,那離遞迴解也快了。
/* ACM 441 Lotto
* mythnc
* 2012/01/10 21:08:05
* run time: 0.008
*/
#include <stdio.h>
#define MAXN 12
#define OUT 6
void input(int n);
void com(int, int, int);
int list[MAXN];
int output[OUT];
int main(void)
{
int n, set;
set = 0;
while (scanf("%d", &n) && n != 0) {
if (set == 1)
putchar('\n');
input(n);
com(0, n, 0);
set = 1;
}
return 0;
}
/* input: receive input data */
void input(int n)
{
int i;
for (i = 0; i < n; i++)
scanf("%d", &list[i]);
}
/*
void com1(int *list, int n)
{
int i, j, k, l, m, o;
for (i = 0; n - i >= OUT; i++)
for (j = i + 1; n - j >= OUT - 1; j++)
for (k = j + 1; n - k >= OUT - 2; k++)
for (l = k + 1; n - l >= OUT - 3; l++)
for (m = l + 1; n - m >= OUT - 4; m++)
for (o = m + 1; n - o >= OUT - 5; o++)
printf("%d %d %d %d %d %d\n",
list[i], list[j], list[k], list[l], list[m], list[o]);
}
*/
/* com: recursive combine to all conditions */
void com(int x, int n, int times)
{
int i;
if (times == OUT) {
printf("%d", output[0]);
for (i = 1; i < OUT; i++)
printf(" %d", output[i]);
putchar('\n');
return;
}
for (i = x; n - i >= OUT - times; i++) {
output[times] = list[i];
com(i + 1, n, times + 1);
}
}
沒有留言:
張貼留言