有10个人排队购一件价为5元的商品其中一半人拿一张10元人民币另一半人拿一张5元的人民币要使售货员在售货中不发生找钱困难问这10个人应该如何排队?找出所有排队方案假设售货员一开始就没有准备零钱。c语言贪心算法
由于一半的人拿10元人民币,一半的人拿5元人民币,因此可以考虑将持有10元人民币的人放在队伍的前面,持有5元人民币的人放在队伍的后面。这样,在售货员开始售货时,前面的人会先使用10元人民币进行支付,售货员可以用5元人民币找零给后面的人,不会出现找零困难的情况。
以下是所有排队方案:
- 10 10 10 10 10 5 5 5 5 5
- 10 10 10 10 5 10 5 5 5 5
- 10 10 10 5 10 10 5 5 5 5
- 10 10 5 10 10 10 5 5 5 5
- 10 5 10 10 10 10 5 5 5 5
- 5 10 10 10 10 10 5 5 5 5
- 10 10 10 10 5 5 10 5 5 5
- 10 10 10 5 10 5 10 5 5 5
- 10 10 5 10 5 10 10 5 5 5
- 10 5 10 5 10 10 10 5 5 5
- 5 10 5 10 10 10 10 5 5 5
- 10 10 10 5 5 10 10 5 5 5
- 10 10 5 10 5 10 5 10 5 5
- 10 5 10 5 10 5 10 10 5 5
- 5 10 5 10 5 10 10 10 5 5
- 10 10 5 5 10 10 10 5 5 5
- 10 5 10 5 10 10 5 10 5 5
- 5 10 5 10 10 5 10 10 5 5
- 10 5 5 10 10 10 10 10 5 5
- 5 10 5 5 10 10 10 10 5 5
- 10 5 5 10 5 10 10 10 5 5
- 5 10 5 5 10 5 10 10 5 5
- 5 5 10 10 10 10 10 10 5 5
- 5 10 5 5 5 10 10 10 10 5
- 5 5 10 5 10 10 10 10 10 5
- 5 5 5 10 10 10 10 10 10 5
- 10 5 5 5 10 10 10 10 10 5
- 5 10 5 5 5 5 10 10 10 10
- 5 5 10 5 5 10 10 10 10 10
- 5 5 5 10 5 10 10 10 10 10
- 5 5 5 5 10 10 10 10 10 10
以下是c语言贪心算法的代码实现:
#include <stdio.h>
int main() { int people[10] = {0, 0, 0, 0, 0, 1, 1, 1, 1, 1}; // 0表示持有10元人民币,1表示持有5元人民币 int i, j, temp, count = 1; printf("所有排队方案如下:\n"); do { printf("%d. ", count++); for (i = 0; i < 10; i++) // 冒泡排序 { for (j = i + 1; j < 10; j++) { if (people[i] > people[j]) { temp = people[i]; people[i] = people[j]; people[j] = temp; } } printf("%d ", people[i] == 0 ? 10 : 5); } printf("\n"); } while (next_permutation(people, people + 10)); // 使用STL库函数生成下一个排列 return 0;
原文地址: http://www.cveoy.top/t/topic/fJvj 著作权归作者所有。请勿转载和采集!