• 蓝桥杯 勾股数 暴力


    问题描述
      勾股数是一组三个自然数,a < b < c,以这三个数为三角形的三条边能够形成一个直角三角形
      输出所有a + b + c <= 1000的勾股数
      a小的先输出;a相同的,b小的先输出。
    输出格式
      每行为一组勾股数,用空格隔开
    样例输出
    例如,结果的前三行应当是
    3 4 5
    5 12 13
    6 8 10
    水题,不过有些思考还是对我挺有帮助的。
    我第一版代码长这样。
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main() {
     4     for (int i = 1; i <= 1000; i++) {
     5         for (int j = 1; j <= 1000; j++) {
     6             for (int k = 1; k <= 1000; k++) {
     7                 if (i + j + k <= 1000 && i * i + j * j == k * k) {
     8                     cout << i << " " << j << " " << k << endl;
     9                 }
    10             }
    11         }
    12     }
    13     return 0;
    14 }

    然后时间复杂度10^9。

    然后看到题目要求a小的先输出,然后b小的输出,然后c小的输出。

    然后就可以改成这样。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main() {
     4     for (int i = 3; i <= 1000; i++) {
     5         for (int j = i + 1; j <= 1000; j++) {
     6             for (int k = j + 1; k <= 1000; k++) {
     7                 if (i + j + k <= 1000 && i * i + j * j == k * k) {
     8                     cout << i << " " << j << " " << k << endl;
     9                 }
    10             }
    11         }
    12     }
    13     return 0;
    14 }

    这样就保证了a小的先输出,然后b小的输出,然后c小的输出。

    然后还可以再减去多余的运算,所以最外层可以改为 for (int i = 3; i <= 333; i++)。因为333+334+335就大于1000了。同理对第二层的范围修改一下,第三层就不能大改了。

    然后就是时间复杂度较小的最终版代码了。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main() {
     4     for (int i = 3; i <= 333; i++) {
     5         for (int j = i + 1; j <= 500; j++) {
     6             for (int k = j + 1; k <= 999; k++) {
     7                 if (i + j + k <= 1000 && i * i + j * j == k * k) {
     8                     cout << i << " " << j << " " << k << endl;
     9                 }
    10             }
    11         }
    12     }
    13     return 0;
    14 }
  • 相关阅读:
    线程(C++11)
    初始化、赋值
    优质学习资料总结
    移植之乱谈
    采集音频和摄像头视频并实时H264编码及AAC编码
    H264解码器源码(Android 1.6 版)
    移植ffmpeg到VC环境心得
    收集的网络上大型的开源图像处理软件代码(提供下载链接)
    C++开源库,欢迎补充。
    一个轻量级AOP的实现(开源)
  • 原文地址:https://www.cnblogs.com/fx1998/p/12738119.html
Copyright © 2020-2023  润新知