GoでOJを作ったときに遭遇した問題について
6281 ワード
GoでOJを作ったときに遭遇した問題について
全体的にojはc/c++で行うのに適しています.多くのojは彼らの入力サンプルの処理に完備しているからです.しかし、小衆言語Goにとって、そんなによくありません.あるいは、入力の処理方法は少し面倒です.また、このような入出力の気持ち悪い人を突っ込むojサイトは、最近leetcodeを塗って入出力を処理しないojに慣れているのかもしれません.牛客網のOJ入力では、よく問題が発生する 複数組のデータ入力は、必ずfmtを処理する.Scanln()の戻り値、具体的な処理方法は以下の通りである: 行入力には複数のデータが含まれている.すなわち、複数のスペース分割がある入力である.これもGoの入力がC scanf関数がEOF終了を返す処理方式とは異なり、処理上のトラブルを引き起こす.以下の解決方法 .
全体的にojはc/c++で行うのに適しています.多くのojは彼らの入力サンプルの処理に完備しているからです.しかし、小衆言語Goにとって、そんなによくありません.あるいは、入力の処理方法は少し面倒です.また、このような入出力の気持ち悪い人を突っ込むojサイトは、最近leetcodeを塗って入出力を処理しないojに慣れているのかもしれません.
...
n,err:=fmt.Scanln()
if n==0||err!=nil{
return // break ,
}
問題ソース:複数のデータの下で、その要求した入出力に従って実現したのに、0.00%が通過した問題に遭遇した.複数組のデータの下で、それに要求された入出力が実現されているのに、0.00%が通過する問題に直面している.解決:これは大半がGoの入力によるものであり、GoにはC/C++のEOF制御方式がないためfmtしか通過できない.Scanln()が返すパラメータ判定は,具体的には次のコードを参照する.package main
import "fmt"
func main(){
n:=0
_,_=fmt.Scanln(&n)//
for n>0{
a:=0
for n>2{
a+=n/3;n=n%3+n/3
if n==2{
n++
}
}
fmt.Println(a)
b,err:=fmt.Scanln(&n)
// ,n==0, , , oj , ;
// , !!! ! !
if b==0||err!=nil{
break
}
}
}
import "bufio"
...
reader:=bufio.NewReader(os.Stdin)
n,err:=reader.ReadString("
")
if n==0||err!=nil{
return
}
bytes, _, _ := reader.ReadLine() // ,
str := string(bytes)
fmt.Println(bytes)
fmt.Println(str)