【发布时间】:2021-11-20 18:56:19
【问题描述】:
我正在尝试制作一个程序来计算对象体积的长度、高度和宽度的所有多种组合。
我创建了一些循环遍历所有可能的组合,但我不知道如何防止出现倍数?例如,如果已经找到 1x1x2,我不想计算 1x2x1。到目前为止,这是我的代码:
#include <stdio.h>
#include <math.h>
int main(){
int v, m = 0, k = 0;
scanf("%d", &v); // a is length b is width c is height and v is volume
for(int a=1;a<=v;a++){
for(int b=1;b<v;b++){
for(int c=1;c<v;c++){
m = a*b*c;
if(m == v){
k = k + 1; //k is the number of combinations
}
}
}
}
printf("The number of combinations was: %d", k);
return 0;
}
【问题讨论】:
-
你也说“它应该找到所有组合”,但不是找到它们,你只是计算它们。那么,您需要找到计数,还是需要生成一个包含所有计数的集合?
-
@MarcusMüller 如果您的代码明显是 C 但它是无效的 C 并且巧合的是它恰好是有效的 C++,那么它不是 C。它是 C++。你在抱怨命名空间,但我很少看到人们使用
std::来表示scanf和printf,即使在明显是C++ 的代码中也是如此。这里的代码是一个有效的 C++,它被明确地标记为 C++,所以克服它,把它当作 C++ 对待。如果你愿意,你可以提供一些关于如何让它变得更好的建议。 -
请注意,
int main()不是严格有效的 C(应该是int main(void)) - 但它是完全有效的 C++。 -
@NO_NAME 我真的只是想让 RandomCodeEnjoyer 得到对他们有帮助的答案;当人们不止一次地实际寻找 C 解决方案时,我已经看到人们将事物标记为 C++;你能不干扰他们充分利用我的回答吗?谢谢。
-
只是因为这个讨论已经失控了:这里的核心问题是 RandomCodeEnjoyer 是否需要计数(在这种情况下根本不需要循环,这只是组合)还是元组的实际容器.如果他们需要一个容器,那么如果这是为了与 C 代码(或者实际上是 C 代码)交互,那么 C++ 的答案对他们没有帮助,这就是我礼貌地问的原因。