黄金矿工

题目 ## 黄金矿工

Description

在上个世纪前,安科的后山曾经是一个黄金矿山(现在无力吐槽)。在山上住着是n个矿工,他们辛苦一年终于到了发年终奖励的时候了,公司的CEO vyoung先生决定将一块黄金发给最有价值矿工,不过这就很让他头痛了,这些矿工每个人都是非常卖力的工作的。无奈,vyoung决定让上帝来决定。他让n课矿工围坐在一起成一个圈,第一次淘汰第m个,以后每数k个数淘汰一个,最后一个留下的将获得这块金块。
Input

输入包含多组数据。每组数据包含三个整数 n,k,m(<=2n<=10000,1<=k<=10000,1<=m<=n)

输入结束标志为n=k=m=0
Output

对于每组数据输出最后被留下来的人
Sample Input
8 5 3
100 9999 98
10000 10000 10000
0 0 0
Sample Output
1
93
2019

这里我用链表做的,每次访问到尾节点时,进行下一个节点访问时,模上链表的长度就会回到链表的头节点。
package cn.Javaweb.cc;

import java.util.LinkedList;
import java.util.Scanner;
/**
 * 
 * @author Huai
 * @creation 6:22:03 PMApr 8, 2018
 *
 */
public class R {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            int k = sc.nextInt();
            int m = sc.nextInt();
            if (n == 0)
                break;
            LinkedList<Integer> list = new LinkedList<>();
            for (int i = 0; i < n; i++) {
                list.add(i + 1);
            }
            int length = list.size();
            while (length > 1) {
                m = (m - 1) % length;
                list.remove(m);
                length = list.size();
                m += k;
            }
            for (Integer i : list) {
                System.out.println(i);
            }
        }
        sc.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值