首页 > 试题广场 >

序号4

[编程题]序号4
  • 热度指数:3055 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

输入描述:
一行,一个正整数n(1<=n<=1000000)。


输出描述:
输出答案。
示例1

输入

5

输出

4

说明

出局的编号依次为3,1,5,2,最后留下的是4

备注:
编号从1开始。
Java,突发奇想,使用队列,很简单
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        Queue<Integer> queue = new LinkedList<>();
        for (int i = 1; i <= n; i++) {
            queue.add(i);
        }
        while (queue.size() != 1) {
            for (int i = 0; i < 2; i++) {
                queue.add(queue.poll());
            }
            queue.poll();
        }
        System.out.println(queue.peek());
    }
}

发表于 2023-08-13 16:46:20 回复(1)
import java.util.*;
public class Main{
    public static void main(String[] args) { 
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        int num = 0;
        int person = n;
        for (int i = 0;i < n;i++){
            a[i] = i + 1;
        }
        for (int i = 0;;i++){
            if (i == n){
                i = 0;
            }
            if (a[i] != 0){
                num++;
            }else{
                continue;
            }
            if(num == 3){
                a[i] = 0;
                person--;
                num = 0;
            }
            if(person == 1){
                break;
            }
        }
        for (int i = 0;i < n;i++){
            if (a[i] != 0){
                System.out.println(a[i]);
            }
        }
    }
}

发表于 2021-08-20 15:37:05 回复(0)