【Go语言入门100题】023 输出GPLT (20 分) Go语言 | Golang

【题解】【PTA团体程序设计天梯赛】

L1-023 输出GPLT (20 分) Go语言|Golang

给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。

下面给出甲、乙两人的酒量(最多能喝多少杯不倒)和划拳记录,请你判断两个人谁先倒。

输入格式:

输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。

输出格式:

在一行中按题目要求输出排序后的字符串。题目保证输出非空。

输入样例1:

pcTclnGloRgLrtLhgljkLhGFauPewSKgt

结尾无空行

输出样例1:

GPLTGPLTGLTGLGLL

结尾无空行

思路:

这题我的方法比较暴力,如果先用map进行存储,key是字符,value是数字,然后就一直输出,如果有值,即不等于零的时候就输出,直到全部都没了就退出。

代码如下:

package main

import "fmt"

func main() {
	var str string
	stdMap := make(map[rune]int)
	_,_=fmt.Scan(&str)//GPLT
	for _,item := range str { //map进行存储,`key`是字符,`value`是数字
		if item == 'G' ||item == 'g' {
			stdMap['G']+=1
		}else if  item == 'P'||  item == 'p'{
			stdMap['P']+=1
		}else if item == 'L'||  item == 'l'{
			stdMap['L']+=1
		}else if item == 'T'||  item == 't'{
			stdMap['T']+=1
		}
	}
	s := ""
	for {
		if stdMap['G'] > 0 {  // 如果这个大于零
			s+="G"   // 就让他输出 
			stdMap['G']-- // 然后让这个自减
		}
		if stdMap['P'] > 0 {
			s+="P"
			stdMap['P']--
		}
		if stdMap['L'] > 0 {
			s+="L"
			stdMap['L']--
		}
		if stdMap['T'] > 0 {
			s+="T"
			stdMap['T']--
		}
		if stdMap['G']==0 && stdMap['P']==0  && stdMap['L']==0 && stdMap['T']==0 {
			break  // 如果全都没有的话,就直接退出了。
		}
	}
	fmt.Printf("%s",s)
}
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小生凡一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值