ZQ的睡前故事

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

    ZQ是一个拥有n女朋友的万人迷,她的每一个女朋友每天晚上都会挨个给他打电话,要他讲了睡前故事才能睡觉。可是,每次他的女朋友都会挑他在吃鸡的时候打电话,ZQ总是因为挂机被舍友赶出宿舍,于是,ZQ告诉他的女朋友们,别打电话了,他会主动打过去给他们讲故事,再打电话就分手!

    于是,ZQ把他的女朋友名字写在纸上,画成一圈,顺时针编号为1~n,然后从1开始顺时针数。在每一次数数中,ZQ数k个就停下来,然后给选中的女朋友打电话讲故事。 

    现在需要你按顺序告诉我们他给女朋友打电话的顺序

输入描述:

先输入一个t,然后t组数据,每行包含两个数字n,k,n<20,k>0

输出描述:

按顺序输出每轮被选中的女朋友的编号。

数组处理好就行了一下就行了,用c++写的过来,用java写的没有过,不知道为什么。

【题目链接】戳进来

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int vis[20];
int main()
{
    int t,n,m;
    scanf("%d",&t);
    while(t--){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            vis[i]=1;
        int num=0,index=1;
        while(num<n)
        {
            int k=0;
            for(int i=index;k<=m;i=i%n+1)
            {
                if(vis[i]==1)
                    k++;
                if(k==m)
                {
                    index=(i%n)+1;
                    vis[i]=0;
                    if(num==0)
                        printf("%d",i);
                    else
                        printf(" %d",i);
                    num++;
                    break;
                }
            }
        }
        cout<<endl;
    }
    return 0;
}
import java.util.Scanner;

public class Main{

	public static void main(String[] args){
		int []vis=new int[20];
		int t,n,m,j;
		Scanner cin=new Scanner(System.in);
		t=cin.nextInt();
		for(int i=1;i<=t;i++) {
			n=cin.nextInt();
			m=cin.nextInt();
			for(j=1;j<=n;j++)
				vis[j]=1;
			int num=0,index=1;
			while(num<n) {
				int k=0;
				for(j=index;k<=m;j=(j%n)+1) {
					if(vis[j]==1)
						k++;
					if(k==m) {
						vis[j]=0;
						if(num==0)
							System.out.print(j);
						else if(num==n-1)
							System.out.println(" "+j);
						else
							System.out.print(" "+j);
						index=(j%n)+1;
						num++;
						break;
					}
				}
			}
		}
		cin.close();
	}
}

 

 

 

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页