2 条题解

  • 1
    @ 2025-11-9 16:28:37

    yes

    • 1
      @ 2025-10-24 17:36:01

      思路分析

      1. 任务拆解:

      • 读取整数n
      • 找出所有满足x² + y² = z²的勾股数(x,y,z)
      • 要求x,y,z ≤ n,且x < y < z
      • 按x从小到大,x相同时y从小到大输出
      • 如果没有找到则输出"No"

      2. 关键点分析:

      • 使用三重循环枚举可能的勾股数
      • 外层循环枚举斜边z(从5到n)
      • 中层循环枚举直角边x(从1到z-1)
      • 内层循环枚举直角边y(从x+1到z-1)
      • 检查是否满足x² + y² = z²
      • 统计找到的勾股数组数

      3. 步骤规划:

      • 读取n的值,初始化计数器s=0
      • 外层循环枚举z(5到n)
      • 中层循环枚举x(1到z-1)
      • 内层循环枚举y(x+1到z-1)
      • 检查x² + y² = z²
      • 满足条件则输出并计数
      • 循环结束后检查计数器,若为0则输出"No"

      4. 代码对应:

      • int n,s=0;cin>>n; → 读取n并初始化计数器
      • for(int i=5;i<=n;i++) → 枚举斜边z(最小勾股数3,4,5,所以z从5开始)
      • for(int j=1;j<i;j++) → 枚举直角边x
      • for(int k=j+1;k<i;k++) → 枚举直角边y(保证x < y)
      • if(j*j+k*k==i*i) → 检查勾股定理
      • s++; cout<<j<<" "<<k<<" "<<i<<endl; → 计数并输出
      • if(s==0) cout<<"No"; → 没有找到则输出"No"
      • 1

      信息

      ID
      1290
      时间
      1000ms
      内存
      128MiB
      难度
      7
      标签
      (无)
      递交数
      266
      已通过
      58
      上传者