当前位置:网站首页>7-8 7104 Joseph problem (PTA program design)
7-8 7104 Joseph problem (PTA program design)
2022-07-06 13:56:00 【Programming Lindaiyu】
Joseph's question : Yes n Only monkey , Circle clockwise to choose the king ( Number from 1 To n), From 1 We'll start counting on the , Count to m, Count to m The monkey out of the circle , The rest of the monkeys went on from 1 Start counting . That's it , Until there's only one monkey left in the circle , This monkey is the monkey king , Programming for input n,m after , Output the number of the last Monkey King .
Input format :
Each line is two integers separated by spaces , The first is n, The second is m ( 0 < m, n < 300) . The last line is :0 0 .
Output format :
For each row of input data ( Except for the last line ), The output data is also a line , The number of the last Monkey King .
sample input :
6 2
12 4
8 3
0 0
sample output :
5
1
7
Code (Python):
Method 1 :
n,m=map(int,input().split()) # Input n,m
list1=[] # For storage “ monkey ”
list2=[] # Used to store the final results
f=0 # There are several groups
for i in range(300): # First, add elements to the list , Otherwise, the list is empty , Cannot modify elements in the list
list1.append(0)
while 1:
if n==0 and m==0: # Input “0 0” when , end
break
else: # Or start choosing the monkey king
for i in range(1,n+1): # Because the monkey sequence is from 1 At the beginning , So our list also starts from 1 Start
list1[i]=1 # First initialize the numbers in the list so that they are all 1, use 1 To show the monkeys that have not been eliminated
f+=1 # Count , A total of several groups of numbers were calculated , Last act list2 The length of , use for Output results
i=1 # Start with the first number
sum=n # At the beginning n individual 1
count=0 #count Namely 1~m
while sum>1: #sum by n In number 1 The number of , Remnant 1 individual 1 It means that the monkey king has been selected
if list1[i]!=0: # Not for everyone 0 Number of numbers ( Monkeys that have not been eliminated ),count+1
count+=1
if count==m: # until count Add to equal m When , Count to m The monkey out of the circle
count=0 #count Start counting again
list1[i]=0 # Make the corresponding element equal to 0, It means that it has been eliminated
sum-=1 #sum Number of minus 1, It means that there are few monkeys 1
i+=1 # Every time a monkey is eliminated ,i Add 1, Start looking for the next monkey
if i==n+1: # After subscript exceeds the range , Just go back to the beginning and find , It is equivalent to forming a circle
i=1
for i in range(1,n+1): # Traverse the list
if list1[i]!=0: # Look for not 0 The position of the number of , That is, the serial number of the monkey king
list2.append(i) # And add its serial number to the result list
n,m=map(int,input().split()) # Input again , Ready for the next cycle
for i in range(f): # Output the results in the result list
print(list2[i])
Method 2 :
n,m=map(int,input().split()) ## Input n,m
wang=[] # For storage “ monkey ”
while 1:
if n==0 and m==0 : # Input “0 0” when , end
break
else: # Or start choosing the monkey king
k=0 #k Indicates the order of reported amount , Set it to 0
wang.clear() # First empty the last monkey sequence
for i in range(1,n+1): # take n Monkey from 1 Numbered starting
wang.append(i)
while len(wang) > 1: #wang The length of the list is greater than 1 when , It means that the monkey king has not been elected , Into the loop
i=0
while i<len(wang): # Traverse all monkeys in the king list
k+=1 # From 1 We'll start counting on the , Count to m, Every time I report k Add 1
if k == m: # When k Add to m when , It means that the monkey just counts to m
del wang[i] # Eliminate the monkey , Delete it from the list
k=0 # The rest of the monkeys went on from 1 Start counting , So first of all k Set as 0
# Be careful , On the count of m when , Delete the monkey , So the number of monkeys behind it will be reduced by one , therefore i No need to add 1 You can directly judge the next monkey
else: # If k It's not equal to m, Then the monkey will not be eliminated , send i Add 1, Start judging the next monkey
i+=1
a=wang[0] # Last , Out of the while loop , There must be only one monkey left , The monkey king
print(a) # Because it existed at the beginning wang In the list is the serial number of each monkey , So the value in the direct output is the serial number of the monkey
n,m=map(int,input().split()) # Input again , Ready for the next cycle
Ideas : The above provides two ways to solve this problem , It's basically the same , Are stored through a list “ monkey ”, Then gradually eliminate the selected monkeys , Finally find the monkey king . The difference lies in , In method 1 , First save the data in the list “1” To show the monkeys that have not been eliminated , Then count to m The monkey is set 0 Indicates elimination , There is only one left in the final list “1” when , It means to choose the monkey king . In method two , The serial number of the monkey is directly stored in the list , Then count to m The monkey of is directly deleted from the list , The only remaining element in the final list is the monkey king .
The above program gives more detailed comments , For novice Xiaobai's reference . The idea of program design or code implementation is not optimal , You are welcome to correct your mistakes or give better ideas .
I am a rookie who wants to be Kunpeng , Everyone's encouragement is my driving force , Welcome to like collection comments !
边栏推荐
- SRC mining ideas and methods
- A piece of music composed by buzzer (Chengdu)
- Force deduction 152 question multiplier maximum subarray
- This time, thoroughly understand the MySQL index
- Experiment 8 exception handling
- C language Getting Started Guide
- 2. First knowledge of C language (2)
- PriorityQueue (large root heap / small root heap /topk problem)
- canvas基础2 - arc - 画弧线
- 7-4 散列表查找(PTA程序设计)
猜你喜欢
QT meta object qmetaobject indexofslot and other functions to obtain class methods attention
Write a program to simulate the traffic lights in real life.
强化學習基礎記錄
3. Input and output functions (printf, scanf, getchar and putchar)
Nuxtjs快速上手(Nuxt2)
Reinforcement learning series (I): basic principles and concepts
撲克牌遊戲程序——人機對抗
2022泰迪杯数据挖掘挑战赛C题思路及赛后总结
(原创)制作一个采用 LCD1602 显示的电子钟,在 LCD 上显示当前的时间。显示格式为“时时:分分:秒秒”。设有 4 个功能键k1~k4,功能如下:(1)k1——进入时间修改。
MySQL事务及实现原理全面总结,再也不用担心面试
随机推荐
Difference and understanding between detected and non detected anomalies
仿牛客技术博客项目常见问题及解答(二)
Record a penetration of the cat shed from outside to inside. Library operation extraction flag
【educoder数据库实验 索引】
记一次猫舍由外到内的渗透撞库操作提取-flag
[dark horse morning post] Shanghai Municipal Bureau of supervision responded that Zhong Xue had a high fever and did not melt; Michael admitted that two batches of pure milk were unqualified; Wechat i
[MySQL table structure and integrity constraint modification (Alter)]
js判断对象是否是数组的几种方式
【MySQL数据库的学习】
实验七 常用类的使用
SRC挖掘思路及方法
Canvas foundation 1 - draw a straight line (easy to understand)
7-3 构造散列表(PTA程序设计)
SRC mining ideas and methods
7-7 7003 组合锁(PTA程序设计)
The difference between overloading and rewriting
Implementation principle of automatic capacity expansion mechanism of ArrayList
Force deduction 152 question multiplier maximum subarray
甲、乙机之间采用方式 1 双向串行通信,具体要求如下: (1)甲机的 k1 按键可通过串行口控制乙机的 LEDI 点亮、LED2 灭,甲机的 k2 按键控制 乙机的 LED1
This time, thoroughly understand the MySQL index