|
发表于 2022-2-19 19:12:56
|
显示全部楼层
本帖最后由 人造人 于 2022-2-19 19:14 编辑
- $ cat main.c
- #include <stdio.h>
- void calc(const size_t data[], size_t size) {
- const char *sep = "";
- size_t sum = 0;
- for(size_t i = 0; i < size; ++i) {
- sum += data[i];
- printf("%s%lu ", sep, data[i]);
- sep = "+ ";
- }
- printf("= %lu\n", sum);
- }
- void enum_all(const size_t data[], size_t size, size_t buff[], size_t index, size_t count) {
- if(index >= count) {
- calc(buff, index);
- return;
- }
- if(size == 0) return;
- for(size_t i = 0; i < size; ++i) {
- buff[index] = data[i];
- enum_all(data + 1 + i, size - 1 - i, buff, index + 1, count);
- }
- }
- int main(void) {
- size_t data[] = {1, 2, 3, 4, 5};
- size_t buff[5];
- for(size_t i = 0; i < 5; ++i) {
- enum_all(data, 5, buff, 0, i + 1);
- }
- //enum_all(data, 5, buff, 0, 3);
- //enum_all(data, 5, buff, 0, 2);
- return 0;
- }
- $ gcc-debug -o main main.c
- $ ./main
- 1 = 1
- 2 = 2
- 3 = 3
- 4 = 4
- 5 = 5
- 1 + 2 = 3
- 1 + 3 = 4
- 1 + 4 = 5
- 1 + 5 = 6
- 2 + 3 = 5
- 2 + 4 = 6
- 2 + 5 = 7
- 3 + 4 = 7
- 3 + 5 = 8
- 4 + 5 = 9
- 1 + 2 + 3 = 6
- 1 + 2 + 4 = 7
- 1 + 2 + 5 = 8
- 1 + 3 + 4 = 8
- 1 + 3 + 5 = 9
- 1 + 4 + 5 = 10
- 2 + 3 + 4 = 9
- 2 + 3 + 5 = 10
- 2 + 4 + 5 = 11
- 3 + 4 + 5 = 12
- 1 + 2 + 3 + 4 = 10
- 1 + 2 + 3 + 5 = 11
- 1 + 2 + 4 + 5 = 12
- 1 + 3 + 4 + 5 = 13
- 2 + 3 + 4 + 5 = 14
- 1 + 2 + 3 + 4 + 5 = 15
- $
复制代码 |
|