热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用goto是一种合法的方式来打破两个循环?-Isusinggotoalegitimatewaytobreakoutoftwoloops?

Iamsolvingproblem9ontheProjectEuler.InmysolutionIuseagotostatementtobreakoutof

I am solving problem 9 on the Project Euler. In my solution I use a "goto" statement to break out of two for loops. The Problem is the following:

我正在解决Project Euler上的问题9。在我的解决方案中,我使用“goto”语句来打破两个for循环。问题如下:

A Pythagorean triplet is a set of three natural numbers, a b c, for which,

毕达哥拉斯三元组是一组三个自然数,一个b c,对此,

a^2 + b^2 = c^2

a ^ 2 + b ^ 2 = c ^ 2

For example, 3^2 + 4^2 = 9 + 16 = 25 = 52.

例如,3 ^ 2 + 4 ^ 2 = 9 + 16 = 25 = 52。

There exists exactly one Pythagorean triplet for which a + b + c = 1000. Find the product abc.

恰好存在一个毕达哥拉斯三元组,其中a + b + c = 1000.找到产品abc。

My solution is in c++:

我的解决方案是在c ++中:

int a,b,c;
const int sum = 1000;
int result = -1;
for (a = 1; a

Since "goto" statements are not very popular among c++ programmers, i would like to know, if this could be considered a reasonable use of "goto". Or if there is a better solution for the problem that doesn't need "goto". By that I don't mean a solution which just avoids "goto", but which avoids "goto" in a way that improves the algorithm.

由于“goto”语句在c ++程序员中不是很受欢迎,我想知道,如果这可以被认为是合理使用“goto”。或者,如果有一个更好的解决方案,不需要“转到”的问题。我并不是指一种只避免“转到”的解决方案,而是以改进算法的方式避免“转到”。

7 个解决方案

#1


45  

return is a "structured" goto which many programmers find more acceptable! So:

return是一个“结构化”的转到许多程序员发现更容易接受!所以:

static int findit(int sum, int* pa, int* pb, int* pc)
{
    for (int a = 1; a

#2


18  

In my opinion it's fine to use goto in a situation like this.

在我看来,在这样的情况下使用goto是好的。

Btw, the condescending preaching against goto usually comes from people who just parrot what they heard others say or read somewhere..

顺便说一下,对goto的居高临下的讲道通常来自那些只是鹦鹉学舌的人,他们听到别人说或在某处读到的东西。

#3


6  

See this question about breaking out of 2 loops. There are much better answers provided than using a goto.

看到关于突破2个循环的这个问题。提供的答案比使用goto要好得多。

The best answer provided is to place your second loop into a function, and call that function from inside your first loop.

提供的最佳答案是将第二个循环放入函数中,并从第一个循环内部调用该函数。

code copied from mquander's response

从mquander的响应复制的代码

public bool CheckWhatever(int whateverIndex)
{
    for(int j = 0; j 

Though I do feel that using a goto in this case isn't quite as bad as killing kittens. But it's close.

虽然我觉得在这种情况下使用goto并不像杀小猫那么糟糕。但它很接近。

#4


4  

I can't think of a better alternative. But one alternative not using goto would be modifying the first for-loop:

我想不出更好的选择。但是一个不使用goto的替代方案是修改第一个for循环:

for (a = 1; a

Then break out of the second for-loop. That will work assuming the result will never be -1 after the second for-loop has been broken by break.

然后突破第二个for循环。假设在第二个for循环被中断后,结果将永远不会为-1,这将起作用。

#5


4  

You could declare a bool found = false at the top and then add && !found to your for loop conditionals (after a and b ) and then set found to true where your current goto is. Then make your output conditional on found being true.

您可以在顶部声明一个bool found = false,然后将&&!found添加到for循环条件中(在

#6


3  

I just found this on the "Related" sidebar. An interesting thread overall, but in particular, this is an answer to my question.

我刚刚在“相关”侧栏上找到了这个。一个有趣的线程,但特别是,这是我的问题的答案。

#7


1  

int a,b,c,sum = 1000;
for (a = 1; a

Also optimized result out.. :P

也优化结果..:P

Anyway i love gotos!

无论如何我喜欢gotos!


推荐阅读
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
author-avatar
sprout--_557
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有