You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算可构成三角形的数量?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:01:06