65 lines
1.5 KiB
Plaintext
65 lines
1.5 KiB
Plaintext
Assignment name : powerset
|
|
Expected files : *.c *.h
|
|
Allowed functions: atoi, printf, fprintf, malloc, calloc, realloc, free, stdout,
|
|
write
|
|
--------------------------------------------------------------------------------
|
|
|
|
Write a program that will take as argument an integer n followed by a set s of
|
|
distinct integers.
|
|
Your program should display all the subsets of s whose sum of elements is n.
|
|
|
|
The order of the lines is not important, but the order of the elements in a subset is:
|
|
it must match the order in the initial set s.
|
|
This way, you should not have any duplicates (eg: '1 2' and '2 1').
|
|
For example, using the command ./powerset 5 1 2 3 4 5
|
|
this output is valid:
|
|
1 4
|
|
2 3
|
|
5
|
|
this one is also valid:
|
|
2 3
|
|
5
|
|
1 4
|
|
but not this one:
|
|
4 1
|
|
3 2
|
|
5
|
|
|
|
|
|
In case of a malloc error your program will exit with the code 1.
|
|
|
|
We will not test with invalid sets (for example '1 1 2').
|
|
|
|
Hint: the empty subset is a valid subset of any set. It will be displayed as an empty line.
|
|
|
|
For example this should work:
|
|
$> ./powerset 3 1 0 2 4 5 3 | cat -e
|
|
3$
|
|
0 3$
|
|
1 2$
|
|
1 0 2$
|
|
$> ./powerset 12 5 2 1 8 4 3 7 11 | cat -e
|
|
8 4$
|
|
1 11$
|
|
1 4 7$
|
|
1 8 3$
|
|
2 3 7$
|
|
5 7$
|
|
5 4 3$
|
|
5 2 1 4$
|
|
$> ./powerset 0 1 -1 | cat -e
|
|
$
|
|
1 -1$
|
|
$> ./powerset 7 3 8 2 | cat -e
|
|
|
|
// Other tests:
|
|
$> ./powerset 100 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | cat -e
|
|
...
|
|
$> ./powerset -1 1 2 3 4 5 -10 | cat -e
|
|
...
|
|
$> ./powerset 0 -1 1 2 3 -2 | cat -e
|
|
...
|
|
$> ./powerset 13 65 23 3 4 6 7 1 2 | cat -e
|
|
...
|
|
$> ./powerset 10 0 1 2 3 4 5 6 7 8 9 | cat -e
|
|
... |