View Code of Problem 80

#include<stdio.h>  //二刷 本题其实没有描述清楚。
//本题的意思是每个人从1开始编号,第一个人编号为1,第二个人编号为2,以此类推。
//当数到3有人淘汰后,该人的后一个人接着从1开始报数,如此循环往复。问最后留下来的那个人的编号
//也就是问最后留下来的那个人是最初队伍的第几个人 

long long dp[91];  //题目没说n最多不超过几,所以这里随意假定了一个值 
void Initial(){
	dp[1] = 1; //假设最开始只有一个人的时候,编号为1; 这是初始情况
	dp[2] = 2; //当有两个人的时候,留下来的是第二个人,第二个人编号为2 
	for(int i=3; i<91; i++){
		dp[i] = (dp[i-1] + 3) % i; //递推公式 f(n) = (f(n-1) + m) % n,此处m=3, n就是这里的i 
	} 
	return;
}

int main(){
	Initial(); 
	int n;
    while(scanf("%d", &n) != EOF) {
        if (n == 0)  break;
        else printf("%lld\n", dp[n]);  
	} 
	return 0;
}

Double click to view unformatted code.


Back to problem 80