Search Problems,有简单题的解法,但是我用DFS来做。一开始构思没什么头绪,后来在草稿纸上演算,得出方法。反复调试演算,终于做对了。最后由于最后一个换行的问题导致PE,轻松解决。
//ZOJ 1089Lotto
#include <iostream>
#include <stdio.h>
#include <memory.h>
//#define DEBUG
using namespace std;
void Dfs(int sum, int num[15], int ptr, int out_sum, int output[6])
{
#ifdef DEBUG
cout << "dfs " << ptr << " " << out_sum << endl;
#endif
for (int i = 0; i <= sum - ptr - out_sum; i ++)
{
output[6 - out_sum] = num[ptr + i];
if (out_sum > 1)
{
Dfs(sum, num, ptr + i + 1, out_sum - 1, output);
}
else
{
for (int i = 0; i < 6 - 1; i ++)
{
cout << output[i] << " ";
}
cout << output[5] << endl;
}
}
}
int main(int argc, char *argv[])
{
int sum, num[15], output[6];
bool is_first = true;
while (cin >> sum && sum > 0)
{
if (is_first == true)
is_first = false;
else
cout << endl;
memset(output, 0x0, sizeof(output));
for (int i = 0; i < sum; i ++)
{
cin >> num[i];
}
Dfs(sum, num, 0, 6, output);
}
return 0;
}