试题编号: | 201712-2 |
试题名称: | 游戏 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向。 输入格式 输入一行,包括两个整数n和k,意义如题目所述。 输出格式 输出一行,包含一个整数,表示获胜的小朋友编号。 样例输入 5 2 样例输出 3 样例输入 7 3 样例输出 4 数据规模和约定 对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 9。 |
java:100分用例通过
import java.util.Scanner;
public class 游戏 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[] a = new int[n];
for(int i = 0; i < n; i++) {
a[i] = i + 1;
}
int remain = n;
int count = 1;
while(remain != 1) {
for(int i = 0; i < n; i++) {
if(a[i] != 0) {
a[i] = count;
if(count % k == 0 || count % 10 == k) {
a[i] = 0;
remain--;
}
count++;
}
if(remain == 1)//如果不加这行,会运行超时,只能得90分,所以记得及时跳出循环;
break;
}
}
for(int i = 0; i < n; i++) {
if(a[i] != 0)
System.out.println(i+1);
}
}
}
c++:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
if(n==1)
{
cout<<1;
return 0;
}
int a[1000];
fill(a,a+1000,1);
int index=0,sum=0,counter=0;
do
{
if(a[index]!=0)
{
sum+=a[index];
if(sum%k==0 || sum%10==k)
{
counter++;
a[index]=0;
if(counter==n)
{
cout<<index+1;
break;
}
}
}
index++;
index%=n;
}
while(true);
return 0;
}