如何计算可构成三角形的数量?C代码计算结果错误求助
问题分析与代码修正:统计1…N中不同整数构成的有效三角形三元组数量
原代码输入N=5时返回34,但正确结果应为3,问题出在以下几点:
- 循环范围错误:原代码用
i < N、j < N、k < N限制循环,导致无法取到N值,比如输入5时会漏掉包含5的有效三元组。 - 未限制三数不同:代码允许i、j、k取相同数值,像(1,1,1)这类不符合要求的组合会被错误计数。
- 重复计数:原代码会把同一个三元组的所有排列(比如(2,3,4)、(3,2,4)等)都算作独立情况,导致计数大幅虚高。
修正思路
要避免重复计数且保证三数不同,可让循环变量满足i < j < k,这样每个三元组只会被遍历一次。同时由于i < j < k,三角形的判断条件可简化为i + j > k(另外两个条件i + k > j和j + k > i必然成立,无需额外判断)。
修正后的代码
#include <stdio.h> int main() { int N, count = 0; setvbuf(stdout, NULL, _IONBF, 0); printf("Please input the value of N: \n"); scanf("%d", &N ); // 保证i < j < k,避免重复计数且确保三个数不同 for (int i = 1; i <= N; i++) { for (int j = i + 1; j <= N; j++) { for (int k = j + 1; k <= N; k++) { // 由于i<j<k,只需判断最小两边之和大于第三边即可 if (i + j > k) { count++; } } } } printf("Total number of triangles possible is %d ", count); return 0; }
测试输入5时,代码会准确统计(2,3,4)、(2,4,5)、(3,4,5)这3个有效三元组,输出正确结果3。
内容的提问来源于stack exchange,提问作者Rosaline
相关产品推荐
相关产品推荐

