当前位置: 首页 > 知识库问答 >
问题:

勾股定理测试不工作?

吴高峰
2023-03-14

所以我试图写一个程序,循环通过三角形的三个边的所有可能的边长组合,并打印遵循勾股定理的那些(即,侧A(sqr)侧B(sqr)=斜边(sqr))。匹配的,它应该打印。然而,数学没有按照它应该的方式执行。我认为问题在于我如何设置我的循环。

那么我的问题是,我应该如何设置?因为我觉得for循环的执行方式如下:

最外层的循环将检查毕达哥拉斯条件是否满足。如果是,它将打印结果、递增并再次测试。当条件不满足时,它将转移到第二个for循环,在该循环中重复相同的过程,此时第二个for循环将转移到第三个for循环,即最内层的for循环。在那里,它将一直增加到500,测试并打印每个适用的结果,一旦完成,它将传输回中间的循环。中间循环递增,再次测试,一旦条件未检出,代码将转移到最里面的循环,过程将重复,只有这一次中间循环变量发生了更改(即,正在测试新的数字集)整个过程一直重复,直到第二个for循环一直增加到500,在这一点上它转移到最外层的循环,并且整个过程都重复。最外层的循环递增,直到不再满足条件,然后转移到中间的循环,两个内部循环只在这一次使用一个更改的外部for循环变量(即再次测试新的可能性)再次执行其程序。

在此方面的任何和所有帮助都将不胜感激。我很想继续,但我觉得嵌套循环的概念是理解的关键,我不想低估自己。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void) {

    int sideA = 1;
    int sideB = 1;
    int hypotenuse = 1;

    for (hypotenuse = 1; hypotenuse <= 500; hypotenuse++) {
        if ( (hypotenuse * hypotenuse) == ( sideA * sideA + sideB * sideB) ) {
            printf("%d, %d, %d\n", sideA, sideB, hypotenuse);
        }

        else {
            for (sideA = 1; sideA <= 500; hypotenuse++) { 
                if ( (hypotenuse * hypotenuse) == ( sideA * sideA + sideB * sideB) ) {
                    printf("%d, %d, %d\n", sideA, sideB, hypotenuse);
                }

                else {
                    for (sideB = 1; sideB <= 500; sideB++) {
                        if ( (hypotenuse * hypotenuse) == ( sideA * sideA + sideB * sideB) ) {
                            printf("%d, %d, %d\n", sideA, sideB, hypotenuse);
                        }      
                    }   
                }
            }           
        }        
    }
}

共有1个答案

慎俊艾
2023-03-14

处输入错误(sideA=1;sideA)

而且,如果有过多的“如果”,你根本不需要这些。

#include <stdio.h>

int main(void)
{
    int sideA, sideB, hypotenuse;

    for (hypotenuse = 1; hypotenuse <= 500; hypotenuse++)
        for (sideA = 1; sideA <= 500; sideA++)
            for (sideB = 1; sideB <= 500; sideB++)
                if ((hypotenuse * hypotenuse) == (sideA * sideA + sideB * sideB))
                    printf("%d, %d, %d\n", sideA, sideB, hypotenuse);
}

http://ideone.com/P01jxB

此外,观察代码中会发生的一些行为:

  1. 在第一个循环之后,第一个使用的side Aside B如果不再是1,它们甚至可能超出绑定(501)。
  2. 如果逻辑落在这些ifs中的任何一个上,您将无法运行其他值的测试。

至于性能,请注意这个嵌套循环总共运行了1.25亿次(500*500*500)。这可以通过多种方式进行优化,包括使用包含但未使用的库的两个函数,math。h

#include <stdio.h>
#include <math.h>

int main(void)
{
    int a, b;
    for (a = 1; a <= 500; a++)
        for (b = a; b <= 500; b++) // b starts from a, not 1
        {
            double h = sqrt(a * a + b * b);

            if (h > 500.0) // hypotenus is bigger than 500, stop the loop
                break;

            if (fmod(h, 1) == 0.0) // only print if hypotenuse is an integer value
            {
                printf("%d, %d, %d\n", a, b, (int)h);
                printf("%d, %d, %d\n", b, a, (int)h); // print both ways around, optional
            }
        }
    return 0;
}

http://ideone.com/DZFa3s

这应该会产生相同的结果(但顺序不同),而且速度更快,总共只运行大约98000个循环。

 类似资料:
  • 勾股OA办公系统是一款简单实用的开源免费的企业办公系统。系统集成了系统设置、人事管理模块、消息管理模块、企业公告、知识库、审批流程设置、办公审批、日常办公、财务管理、客户管理、合同管理、项目管理、任务管理等模块。系统简约,易于功能扩展,方便二次开发。 内置模块 配置管理:对系统的常规配置信息进行维护,网站配置管理功能统一维护。 用户管理:维护管理系统的用户,常规信息的维护与账号设置。 菜单管理:配

  • 勾股CMS是一套基于ThinkPHP6 + Layui + MySql打造的轻量级的通用后台管理框架。系统后台集成了主流的通用功能,如:登录验证、系统配置、操作日志管理、角色权限管理、功能管理(后台菜单管理)、导航设置、网站地图、轮播广告、TAG关键字管理、搜索关键字管理、文件上传、数据备份/还原、文章功能、商品功能、单页面管理、用户管理、用户操作日志、用户注册/登录、 API接口等。更多的个性化

  • 勾股 DEV 是一款专为IT研发团队打造的项目管理与团队协作的系统工具,可以在线管理团队的工作、项目和任务,覆盖从需求提出到研发完成上线整个过程的项目协作。 通过“项目(Project)”的形式把成员、需求、任务、缺陷(BUG)、文档、互动讨论以及各种形式的资源组织在一起,团队成员参与更新任务、文档等内容来推动项目的进度,同时系统利用时间线索和各种动态的报表的形式来自动给成员汇报项目进度。 系统特

  • 嗨,当我运行我的测试通过一个计划的java代码,并使用WebDriver的关闭()方法它是关闭各自的浏览器实例。但是,当我在testNG类中使用driver.close()时,在任何@后注释中,如 然后它不会关闭浏览器实例。请尝试以下两个代码段:TestNGSnippet: 简单片段: 它是一个bug在testNG。注意:driver.quit()正在工作,但我不能使用它,因为当我并行运行我的测试

  • 1. 首先是在我面完上一家有点难受的时候接到了测试经理的面试电话,问我了一些项目经验啊,求职状态啊什么的,说这个职位即将关闭,让我下午就去面试 2.到了之后填了一份信息表,主要是工作经历什么的 3.技术面问了我做过的项目,对测试标准的理解,对我笑嘻嘻的 4.主管面问了我的职业规划,问了我硬件测试的信号层面和可靠性层面我选那个方面,还是对我笑嘻嘻的 5.hr面有点高冷,从头到尾对我冷淡脸,问了我的期

  • 我有一个带有Java配置类的Spring(4.2.5)项目。这些在正常运行项目时起作用,但我无法使我的测试工作。在下面的测试中,为空。 如果添加注释,则会出现异常 其中和在和中定义,后者是基于活动配置文件选择的。 [编辑2] 经过更多的搜索,我发现了这个问题,并且在检查了我的依赖项之后,我发现我在maven依赖项下有Spring-Core-4.1.9,而且我没有在我的POM中包含一个依赖项。添加依