简单5:报数游戏

1.牛牛和牛妹一起玩密码游戏,牛牛作为发送方会发送一个4位数的整数给牛妹,牛妹接收后将对密码进行破解。

破解方案如下:每位数字都要加上3再除以9的余数代替该位数字,然后将第1位和第3位数字交换,第2位和第4位数字交换。

请输出牛妹破解后的密码。

输入描述:

输入一个四位数的整数。

输出描述:

输出破解后的密码,以四位数的形式。

示例1

输入:

1234

输出:

6745

备注:

输入不会有前置0,但是输出要保持前置0

 

a = str(input())

A = []

for i in range(len(a)):

    A.append(a[i])

for i in range(len(A)):

    A[i] = str((int(A[i])+3)%9)

A[0],A[2] = A[2],A[0]

A[1],A[3] = A[3],A[1]

print(''.join(A))  #注意字符才可以拼接,数字拼接报错

 

2.牛牛在和朋友玩报数游戏,他和朋友们围成一圈,共有n个人,牛牛最初站在第m个位置。从第一个人开始报数,但凡报到3的人就退出圈子,请问牛牛是第几个退出圈子的人?

输入描述:

第一行输入n,n>2

第二行输入m,m<n

输出描述:

输出一个整数表示牛牛是第几个退出圈子的人

示例1

输入:

3

3

输出:

1

 

方法一

n = int(input())  # N个人围成圈

m = int(input())  # 目标值所在位置

data = []  # 人员列表

del_data = []  # 删除列表

for i in range(1, n + 1):

    data.append(i)  # 使用for循环为列表添加人员

num = 0  # 报数

while len(data) > 2:  # 当列表里的人大于2的时候,循环

    num += 1  # 1 2 3 每次报数+1

    temp = data.pop(0)  # 报数的人从列表删除

    if num == 3:

        del_data.append(temp)  # 报3的人从列表删除,按照顺序添加到被删除的表格里

        num = 0  # 当报数为3的时候,下一个数字为1,num+1=1,所以num=0

    else:

        data.append(temp)  # 不为3的人删除之后,添加到原列表的末尾

 

del_data.extend(data)  # 剩下的两个人添加到删除表的末尾

print(del_data.index(m) + 1)  # 通过索引,得到M是被第几个删除的

 

方法二:

n,m=int(input()),int(input())

arr,x,cnt=list(range(1,n+1)),2,1

while arr.pop(x)!=m:

    x,cnt=(x+2)%len(arr),cnt+1

print(cnt)

 

方法三:

n = int(input())

m = int(input())

total = 0

while True:

    if m % 3 == 0:  #第一圈牛牛退出圈子

        total += m//3

        break

    else:  #进入第二圈

        total += n//3  #第一圈退出人数

        m = m - m//3 + n%3  #第二圈从第一圈最后一个报1的开始

        n = n - n//3  #第二圈剩余人数

print(total)

 

 

posted @ 2022-07-23 21:01  萧六弟  阅读(363)  评论(0)    收藏  举报