|
发表于 2021-12-24 18:05:02
|
显示全部楼层
本楼为最佳答案
 - #include <stdio.h>
- #include <string.h>
- double sum(const double data[], size_t size) {
- double result = 0;
- for(size_t i = 0; i < size; ++i) {
- result += data[i];
- }
- return result;
- }
- void enum_all(const double data[], double buff[], size_t size, size_t index, double target, double result[], size_t *result_size) {
- double current_sum = sum(buff, index);
- if(current_sum > target) {
- current_sum -= buff[--index];
- double result_sum = sum(result, *result_size);
- if(current_sum > result_sum) {
- *result_size = index;
- memcpy(result, buff, sizeof(double) * *result_size);
- }
- return;
- }
- for(size_t i = 0; i < size; ++i) {
- buff[index] = data[i];
- enum_all(data, buff, size, index + 1, target, result, result_size);
- }
- }
- int main(void) {
- //double price[5] = {1.2, 2.3, 3.4, 4.5, 5.6};
- double price[5] = {1.2, 2.3, 2.6, 4.5, 5.6};
- //double price[5] = {1.2, 2.3, 2.7, 8.1, 5.6};
- double buff[10];
- double result[10];
- size_t size = 0;
- enum_all(price, buff, 5, 0, 10, result, &size);
- for(size_t i = 0; i < size; ++i) {
- printf("%lf ", result[i]);
- }
- puts("");
- printf("sum: %lf\n", sum(result, size));
- return 0;
- }
复制代码 |
|