PTA(Basic Level) Practice 刷题(部分) Python实现 ● 1001 害死人不偿命的(3n+1)猜想 ● 1002 写出这个数 ● 1006 换个格式输出整数 ● 1009 说反话 ● 1003 我要通过

突然发现草稿箱里有几个3月份刷PTA的做题记录,忘记当时为什么没有发,现在整理一下重新发出来吧。

PTA(Basic Level) Practice 刷题(部分) Python实现
● 1001 害死人不偿命的(3n+1)猜想
● 1002 写出这个数
● 1006 换个格式输出整数
● 1009 说反话
● 1003 我要通过
我最初代码如下:

# 判断输入是否正确
while True:
    n = input()
    if n.isdigit():
        # 将n转为int型
        n = int(n)
        # 判断数字是不是超过1000的正整数
        if 0 < n < 1000:
            break
# 判断n的奇偶性,根据奇偶性进行计算
count = 0
while n != 1:
    if n % 2 == 0:    # 奇数
        n /= 2
    else:   # 偶数
        n = (3*n+1) / 2
    count += 1
# 输出
print(count)

按上面这样提交会报“非零返回”,不知是什么原因,暂时修改成下面这样,PTA提示答案正确。

n = int(input())
# 判断n的奇偶性,根据奇偶性进行计算
count = 0
while n != 1:
    if n%2 == 0:    # 奇数
        n/=2
    else:   # 偶数
        n=(3*n+1)/2
    count += 1
# 输出
print(count)

● 1002 写出这个数

PTA(Basic Level) Practice 刷题(部分) Python实现
● 1001 害死人不偿命的(3n+1)猜想
● 1002 写出这个数
● 1006 换个格式输出整数
● 1009 说反话
● 1003 我要通过

# 接收一个输入,判断其是否为小于10^100的正整数
while True:
    n = input()
    if n.isdigit():
        num = int(n)
        if 0 <= num <= 10**100:
            break
# 获取输入的数各位之和
digit_sum = 0
for i in n:
    digit_sum += int(i)
# 用汉语拼音输出结果
cn_num = ["ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"]
digit_sum = str(digit_sum)  # 将digi_sum转换为str类型
count = 0
for i in digit_sum:
    print(cn_num[int(i)], end="")
    count+=1
    if count!= digit_sum.__len__():
        print(" ", end="")

● 1006 换个格式输出整数

PTA(Basic Level) Practice 刷题(部分) Python实现
● 1001 害死人不偿命的(3n+1)猜想
● 1002 写出这个数
● 1006 换个格式输出整数
● 1009 说反话
● 1003 我要通过

# 接收键盘输入一个不超过3位的正整数
while True:
    n = input()
    if n.isdigit():
        if 0 < int(n) <1000:
            n = int(n)
            break
# 换格式输出
n_1 = int(n%10)
n_2 = int(n/10%10)
n_3 = int(n/100)
print("B"*n_3 + "S"*n_2, end="")
for i in range(1, n_1+1):
    print(i, end="")

● 1009 说反话

PTA(Basic Level) Practice 刷题(部分) Python实现
● 1001 害死人不偿命的(3n+1)猜想
● 1002 写出这个数
● 1006 换个格式输出整数
● 1009 说反话
● 1003 我要通过

# 接收用户输入一句长度不超过80的字符串
while True:
    en_str = input()
    if en_str.__len__() <=80:
        break
# 倒序输出
en_list = en_str.split(" ")
en_list.reverse()
count = 0
for i in en_list:
    count+=1
    print(i, end="")
    # 末尾不输出空格
    if count != en_list.__len__():
        print(" ", end="")

● 1003 我要通过

PTA(Basic Level) Practice 刷题(部分) Python实现
● 1001 害死人不偿命的(3n+1)猜想
● 1002 写出这个数
● 1006 换个格式输出整数
● 1009 说反话
● 1003 我要通过
PTA(Basic Level) Practice 刷题(部分) Python实现
● 1001 害死人不偿命的(3n+1)猜想
● 1002 写出这个数
● 1006 换个格式输出整数
● 1009 说反话
● 1003 我要通过

def check(sl:str) -> str:
    # 判断是否只有PAT这三个字母
    for i in sl:
        if i not in "PAT":
            return "NO"
    # 判断PAT是否存在且PT是否唯一
    if sl.count("A") == 0:
        return "NO"
    if sl.count("P") != 1:
        return  "NO"
    if sl.count("T") != 1:
        return  "NO"
    # 判断P是否在T之前
    if sl.index("T") < sl.index("P"):
        return "NO"
    # 判断A的数量和位置是否符合条件
    a = sl[:sl.index("P")]
    b = sl[sl.index("P"):sl.index("T")]
    c = sl[sl.index("T"):]
    if b.count("A") == 1:
        if a.count("A") != c.count("A"):
            return "NO"
    elif b.count("A") == 0:
        return "NO"
    else:
        if a.count("A") == c.count("A") == 0:
            return "YES"
        elif c.count("A") == 0:
            return "NO"
        elif c.count("A")/a.count("A") != b.count("A"):
            return "NO"
    return "YES"

n = int(input())
# 输入测试用例
sl = []
for i in range(n):
    ss = input()
    sl.append(ss)
# 接收结果
result = []
for i in sl:
    re = check(i)
    result.append(re)
# 循环输出结果
for i in result:
    print(i)

PTA(Basic Level) Practice 刷题(部分) Python实现
● 1001 害死人不偿命的(3n+1)猜想
● 1002 写出这个数
● 1006 换个格式输出整数
● 1009 说反话
● 1003 我要通过