草庐IT

go - 无法让 for 循环迭代足够的次数让我的程序运行

coder 2023-06-28 原文

我正在尝试做一些我们的教授给我们准备考试的练习,但我遇到了一个非常烦人的问题。
练习需要两个输入,n 和 d,程序必须找到从数字 n 中删除 d 个小数的最小数字。问题出在第 40 或 41 行附近,因为我不知道如何获得足够的循环来尝试所有可能的循环。至于现在,该程序是有限的,不能与大多数输入一起正常工作。

示例输入: 32751960 3
预期输出:21960(这是我们从第一个数字中删除 3 位小数后可以得到的最小数字)
我得到了什么: 31960

提前感谢任何愿意帮助我的人。

代码:

package main

import (
    "fmt"
    "os"
    "bufio"
    "strconv"
    "strings"
    "math"
)

var (
    input string
    n, d, max int
    num, dec string
    in []int
)

func main (){
    getInput()
    max = n
    fmt.Println("Variables: ", n, d)

    //Check
    if d>len(num){
        fmt.Println(math.NaN())
        os.Exit(0)
    }

    //The problematic cicle
    for i:=d; i<=len(num); i++{ //On line 40 or 41 lies the problem: I don't get enough loops to check every possible combination,
                                //and at the same time i have to limit the i var to not exceed the slice boundaries
        temp := num[:i-d] + num[i:] 
        if temp == ""{ //To avoid blank strings
            continue
        }
        itemp, _ := strconv.Atoi(temp)
        fmt.Println(itemp)
        if itemp < max {
            max = itemp
        }

    }
    fmt.Println("Best number:",max)
}

func getInput(){
    scanner := bufio.NewScanner(os.Stdin)
    if scanner.Scan(){
        input = scanner.Text()
    }
    for _, s := range strings.Fields(input){
        i, err := strconv.Atoi(s)
        if err != nil {
            fmt.Println(err)
        }
        in = append(in, i) //
    }
    n = in[0] //main number
    d = in[1] //decimals to remove
    num = strconv.Itoa(n)
    dec = strconv.Itoa(d) 
}

最佳答案

你需要先考虑算法。
并且要删除的数字似乎不连续:
这里temp := num[:i-d] + num[i:]您正在尝试删除 3 个相邻的数字(对于 d=3 )并且您应该尝试删除不相邻的数字。
提示:
一次删除一个数字(k):n = n[:k] + n[k+1:]


  1. 首先出于学习目的,我建议您尝试蛮力法:生成所有可能的状态并找出其中最小的状态。

  1. 对于最小的数字,左边的数字小于右边的数字。
    删除 d不连续的数字然后找到最小的数字。我为 d 推荐一个循环数字:
    for i := 0; i < d; i++ {
    和另一个寻找 k 的循环要删除的位置:
    for j := 0; j < k; j++ { .

thisthis :

package main

import "fmt"

func main() {
    n := "32751960"
    d := 3
    // fmt.Scan(&n, &d)
    for i := 0; i < d; i++ {
        k := len(n) - 1
        for j := 0; j < k; j++ {
            if n[j] > n[j+1] {
                k = j
                break
            }
        }
        n = n[:k] + n[k+1:]
    }
    fmt.Println(n) // 21960
}

  1. 使用 1 个循环,例如 this :
package main

import "fmt"

func main() {
    n := "322311"
    d := 3
    // fmt.Scan(&n, &d)
    for j := 0; j < len(n)-1; j++ {
        if n[j] > n[j+1] {
            n = n[:j] + n[j+1:]
            j = -1
            d--
            if d <= 0 {
                break
            }
        }
    }
    n = n[:len(n)-d]
    fmt.Println(n) // 211
}

关于go - 无法让 for 循环迭代足够的次数让我的程序运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56118409/

有关go - 无法让 for 循环迭代足够的次数让我的程序运行的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  3. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  4. ruby - 树顶语法无限循环 - 2

    我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He

  5. ruby-on-rails - 在 Ruby 中循环遍历多个数组 - 2

    我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代

  6. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  7. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  8. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  9. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  10. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

随机推荐