猴子选大王 java,PAT-JAVA-5-28 猴子选大王 (20分)
F(1)=0
當有2個人的時候(N=2),報道(M-1)的人自殺,最后自殺的人是誰?應該是在只有一個人時,報數時得到的最后自殺的序號加上M,因為報到M-1的人已經自殺,只剩下2個人,另一個自殺者就是最后自殺者,用函數表示:
F(2)=F(1)+M
可以得到遞推公式:
F(i)=F(i-1)+M
因為可能會超出總人數范圍,所以要求模
F(i)=(F(i-1)+M)%i
有了遞推公式就可以在O(N)時間求出結果
#include
using namespace std;
int main()
{
int N;//人的總個數
int M;//間隔多少個人
cin>>N;
cin>>M;
int result=0;//N=1情況
for (int i=2; i<=N; i++)
{
result=(result+M)%i;
}
cout<
return 0;
}
該題的代碼如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(f(n)+1);
}
public static int f(int n){
if(n==1){
return 0;
}
else{
return (f(n-1)+3)%n;
}
}
}
總結
以上是生活随笔為你收集整理的猴子选大王 java,PAT-JAVA-5-28 猴子选大王 (20分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hive sql练习_经典的SparkS
- 下一篇: 怎么删除python工程_python根