亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法讓 for 循環迭代足夠的次數讓我的程序運行

無法讓 for 循環迭代足夠的次數讓我的程序運行

Go
隔江千里 2023-06-19 14:11:19
我正在嘗試做一些我們的教授給我們準備考試的練習,但我遇到了一個非常煩人的問題。練習需要兩個輸入,n 和 d,程序必須找到從數字 n 中刪除 d 個小數的最小數字。問題出在第 40 或 41 行附近,因為我不知道如何獲得足夠的循環來嘗試所有可能的循環。至于現在,該程序是有限的,不能與大多數輸入一起正常工作。示例輸入: 32751960 3預期輸出: 21960(這是我們可以通過從第一個數字中刪除 3 個小數點得到的最小數字)我得到的是: 31960提前感謝任何愿意幫助我的人。代碼:package mainimport (    "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) }
查看完整描述

1 回答

?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

你需要先考慮算法。
并且要刪除的數字似乎不連續:
在這里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++ {

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 個循環,如下所示:


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

}


查看完整回答
反對 回復 2023-06-19
  • 1 回答
  • 0 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號