2 条题解
-
1
思路分析
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++)→ 枚举直角边xfor(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
- 上传者