Go plus 安装运行
项目地址: https://github.com/goplus/gop.git
安装
按照文档提示
git clone https://github.com/goplus/gop.git
cd gop
./all.bash
安装完之后:
运行hello world程序
// tmp/helloworld.gop
package main
func main() {
println("hello world!")
}
ATTENTION⚠️ 解决(非代码问题)运行不成功
在用 gop run tmp/helloworld.gop
运行的过程中,刚开始始终运行不成功
检查tmp
目录下存在go.mod
文件,删除该文件再运行,成功解决✅
变量
gop
支持不同类型的变量联结:
// tmp/variables.gop
package main
func main() {
x := 123.1 - 3i
y, z := "Hello, ", 123
println(y+"complex:", x+1, "int:", z)
}
如果用go语言实现以上逻辑:
// tmp/variables.go
package main
import "fmt"
func main() {
x := 123.1 - 3i
y, z := "Hello, ", 123
fmt.Printf("%scomplex:%v int: %d\n", y, x+1, z)
}
在go语言中需要用format来格式化输出,gop中可以忽略变量的类型,直接用println进行输出
gop 玩锤子剪刀布游戏
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
输入格式:
输入第 1 行给出正整数 N(≤10 5 ),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。
输出格式:
输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1 个空格分隔。第 3 行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有 1 个空格。如果解不唯一,则输出按字母序最小的解。
输入样例:
10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J
输出样例:
5 3 2
2 3 5
B B
// tmp/cai_quan.gop
package main
import "fmt"
func main() {
var count int
_, _ = fmt.Scanf("%d", &count) // 读取输入的比赛次数
a := make(map[int]string, count)
b := make(map[int]string, count)
var aWin, aLose, aTie int // a 赢,输,平
var bWin, bLose, bTie int
var aMostWinGestureCount int // a最多次赢的次数
var bMostWinGestureCount int
var aMostWinGesture string // a最多次赢的手势
var bMostWinGesture string
aWGesture := make(map[string]int) // 用map集合来记录每个回合的出拳
bWGesture := make(map[string]int)
// 循环count次录入回合数据
for i := 0; i < count; i++ {
var tempA, tempB string
_, _ = fmt.Scanf("%s %s", &tempA, &tempB)
a[i], b[i] = tempA, tempB
// 计算输赢和手势数据
if a[i] == "C" && b[i] == "J" || a[i] == "J" && b[i] == "B" || a[i] == "B" && b[i] == "C" {
aWin++
aWGesture[a[i]]++
bLose++
} else if a[i] == "C" && b[i] == "B" || a[i] == "J" && b[i] == "C" || a[i] == "B" && b[i] == "J" {
aLose++
bWin++
bWGesture[b[i]]++
} else {
aTie++
bTie++
}
}
// 计算a最多次赢的手势
for k, v := range aWGesture {
if v >= aMostWinGestureCount {
if aMostWinGesture == "" {
aMostWinGesture = k
} else if aMostWinGesture > k {
aMostWinGesture = k
}
}
}
// 计算b最多次赢的手势
for k, v := range bWGesture {
if v >= bMostWinGestureCount {
if bMostWinGesture == "" {
bMostWinGesture = k
} else if bMostWinGesture > k {
bMostWinGesture = k
}
}
}
// 输出结果
fmt.Printf("%d %d %d\n", aWin, aTie, aLose)
fmt.Printf("%d %d %d\n", bWin, bTie, bLose)
fmt.Printf("%s %s\n", aMostWinGesture, bMostWinGesture)
}
留下评论