列表

详情


NC54546. AKU NEGARAKU

描述

1st Academy is an international leadership training academy based in Kuala Lumpur. Every year, the company trains thousands of people to be supplied to companies around the world. To be fair amongst all the trainees, the company will do the selection process using numbering system. The trainees will choose a number from 1 to N, and one number is not limited to only one trainee. The N represents the total number of companies that request trainees from the academy. A number, M, would be picked at random, and the selection starts with a trainee whose number is 1, and then in every M’th people after that, wrapping around to 1 after N, and ignoring trainees already selected. For example, if N = 15 and M = 6, trainees would be selected in the order: 6, 12, 3, 10, 2, 11, 5, 15, 13, 9, 14, 4, 1, 8, 7. All the selected trainees except the last one (which is number 7) will be supplied to companies outside of Malaysia. 
However, Leong preferred to stay and work in Malaysia. To him, there is no better place other than Malaysia. He does not mind being located anywhere as long it is Malaysia. As a friend of him, you could help him to choose a number that will save him from being located outside. 
Input 

输入描述

Input will consist of a series of lines, each line containing the number of companies (N) with , and a skipping value (M) with . The values will be terminated by a line consisting of double zeros (0 0) as shown in sample input output.

输出描述

Output will consist of a series of lines, one for each line of the input. Each line will consist of the number M according to the above scheme.

示例1

输入:

15 6 
550 23 
0 0

输出:

7 
470

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 16ms, 内存消耗: 396K, 提交时间: 2020-10-07 12:41:30

#include<iostream>
using namespace std;
int f(int n,int m){
	if(n==1) return 0;
	return (f(n-1,m)+m)%n;
}
int main(){
	int n,m;
	while(cin>>n>>m,n&&m){
		cout<<f(n,m)+1<<endl;
	}
	return 0;
} 

pypy3(pypy3.6.1) 解法, 执行用时: 99ms, 内存消耗: 21592K, 提交时间: 2020-10-02 12:51:33

while True :
    n, m = map(int, input().split())
    if n == 0 and m == 0 :
        break
    ans = 0
    for i in range(2, n + 1) :
        ans = (ans + m) % i
    print(ans + 1)
    

C(clang 3.9) 解法, 执行用时: 13ms, 内存消耗: 256K, 提交时间: 2020-10-05 14:30:00

#include<stdio.h>
int main(){
	int m,n;
	while(scanf("%d%d",&m,&n)&&(m&&n)) {
		int s=0;
		for(int i=1;i<=m;i++){
			s=(s+n)%i;
		} 
	printf("%d\n",s+1);
		
	}
	return 0;
} 

Python3(3.5.2) 解法, 执行用时: 147ms, 内存消耗: 3320K, 提交时间: 2020-10-02 12:37:42

N,M=map(int,input().split())
while not (N==0 and M==0):
    P=0
    for i in range(2,N+1):
        P=(P+M)%i
    print(P+1)
    N,M=map(int,input().split())

C++11(clang++ 3.9) 解法, 执行用时: 14ms, 内存消耗: 380K, 提交时间: 2020-10-02 12:02:21

#include<stdio.h>
int main()
{int i,x,jo,m;
while(~scanf("%d %d",&x,&m)&& x && m)
{

jo=0;
for(i=2;i<=x;i++)
jo=(jo+m)%i;
printf("%d\n",jo+1);
}
}

上一题