<分区>
我正在尝试用 C 语言设计和编写一种算法,以得出一个表格,列出 5 种不同成分的不同百分比。我需要得到一张看起来像这样的表格:
糖(50%).....盐(20%)....胡椒(10%)....辣椒(10%)....辣椒(10%) 糖(50%).....盐(50%)....胡椒(00%)....辣椒(00%)....辣椒(00%) 糖(00%).....盐(100%)...胡椒(00%)....辣椒(00%)....辣椒(00%) 糖(10%).....盐(00%)....胡椒(90%)....辣椒(00%)....辣椒(00%)
我需要捕获所有可能的排列,并注意 0% 是有效排列,如上所示。所有排列的总和必须始终为 100%。
我意识到以 1% 的粒度列出所有可能的排列将意味着大量的排列,因此我希望能够将一个变量传递给我的函数来定义粒度级别;粒度越高,表条目数越少。
我看过许多与此类似的问题,但我找不到处理以下情况的问题 1) 顺序不重要 2) 项目可以排除(在我的例子中,这意味着item 的值为 0); 3) 这个例子是用 C 写的。
[PS:我通过使用食物简化了事情,但这不是家庭作业......请参阅我的其他帖子。]
那么,我的问题是,我该如何编码呢?事实上,我已经尝试使用递归循环对此进行编码:
int variations[] = { 10, 20, 30, 40, 50, 60, 70, 80, 90 };
char names[][10] = { "sugar", "spice", "pepper", "cayenne", "salt", "" );
int componentCount = 5;
for (int i = 0; i < componentCount; ++i)
for (int j = 1; j < componentCount; ++j)
for (int k = 2; k < compoentCount; ++k)
for (int l = 3; l < componentCount; ++l)
for (int m = 4; m < componentCount; ++m)
for (int x = 0; x < componentCount; ++x)
printf("%s=%d", names[x], variations[x]);
但这在捕获所有变化方面并没有做我需要做的事情,我没有早点发布这个,因为我认为我需要采取完全不同的方法,因此我的问题是:这怎么可能完成了吗?