竞赛真题:约瑟夫环

2023-11-19

       Hello~这是我的新专辑!这个专辑中是竞赛真题,所有真题的解将会用Python、C++、C、Java、JS和Go几种语言给大家实现!现在,开始我们的第一个竞赛题目:约瑟夫环

目录

题目内容:

题目分析:

题目思路:

Python代码:

C++代码:

C代码:

Java代码:

JS代码:

 Go代码:

  


题目内容:

        n个人站成一个环,分别有编号1~n。从编号为1的人开始报数,每报道m的人将会淘汰。每淘汰一个人后面的一个人再从1报起。求最后一个人的编号是多少?

题目分析:

        结合生活实际,这n个人站成一个环,我们也可以把这n个人排成一个队伍。每报道m的人就出队,没报道m的人就再次回到队尾,直到队伍中只有一个人为止。大家都发现了,这不就是队列吗?这样的话不就简单了吗?

题目思路:

        (下面假设所有人的编号都在一个数组A中)我们可以利用while循环来帮我们解决问题。如果我们只想获取最后一个人的编号的话,那判断条件就是数组的长度不为1(反过来说就是直到数组长度为1为止),然后再定义一个变量cnt,用来记录现在报道的数字。在循环中判断cnt变量是否等于m,如果等于,则将A[cnt-1]删除,并且重置cnt为1。如果不等于,则cnt自增1。

Python代码:

AC代码

from collections import deque

n, m = map(int, input().split())

q = deque(range(1, n + 1))
cnt = 1

while len(q) > 1:
    x = q.popleft()
    if cnt != m:
        q.append(x)
        cnt += 1
    else:
        cnt = 1

print(q[0])

C++代码:

AC代码: 

#include <bits/stdc++.h>
using namespace std;

int main()
{
	queue<int> q;
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		q.push(i);
	}
	int cnt = 1;
	while(q.size()>1)
	{
		int x = q.front();
		q.pop();
		if(cnt!=m){
			q.push(x);
			cnt++;
		}
		else
		{
			cnt = 1;
		}
	}
	cout<<q.front();
}

C代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int value;
    struct Node* next;
} Node;

typedef struct Queue {
    Node* head;
    Node* tail;
    int size;
} Queue;

void init(Queue* q) {
    q->head = NULL;
    q->tail = NULL;
    q->size = 0;
}

void enqueue(Queue* q, int value) {
    Node* new_node = (Node*) malloc(sizeof(Node));
    new_node->value = value;
    new_node->next = NULL;
    if (q->tail == NULL) {
        q->head = new_node;
    } else {
        q->tail->next = new_node;
    }
    q->tail = new_node;
    q->size++;
}

int dequeue(Queue* q) {
    if (q->size == 0) {
        printf("Error: queue is empty!\n");
        exit(1);
    }
    int value = q->head->value;
    Node* temp = q->head;
    q->head = q->head->next;
    free(temp);
    q->size--;
    if (q->size == 0) {
        q->tail = NULL;
    }
    return value;
}

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    Queue q;
    init(&q);
    for (int i = 1; i <= n; i++) {
        enqueue(&q, i);
    }
    int cnt = 1;
    while (q.size > 1) {
        int x = dequeue(&q);
        if (cnt != m) {
            enqueue(&q, x);
            cnt++;
        } else {
            cnt = 1;
        }
    }
    printf("%d", q.head->value);
    return 0;
}

Java代码:

import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        Queue<Integer> queue = new ArrayDeque<>();
        for (int i = 1; i <= n; i++) {
            queue.offer(i);
        }
        int cnt = 1;
        while (queue.size() > 1) {
            int x = queue.poll();
            if (cnt != m) {
                queue.offer(x);
                cnt++;
            } else {
                cnt = 1;
            }
        }
        System.out.println(queue.poll());
    }
}

JS代码:

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

let n, m;
let queue = [];
let cnt = 1;

rl.on('line', (line) => {
  if (!n) {
    [n, m] = line.trim().split(' ').map(Number);
    queue = Array.from({length: n}, (_, i) => i + 1);
  } else {
    const x = queue.shift();
    if (cnt !== m) {
      queue.push(x);
      cnt++;
    } else {
      cnt = 1;
    }
    if (queue.length === 1) {
      console.log(queue[0]);
      rl.close();
    }
  }
});

 Go代码:

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)

	line, _ := reader.ReadString('\n')
	line = strings.TrimRight(line, "\n")
	params := strings.Split(line, " ")
	n, _ := strconv.Atoi(params[0])
	m, _ := strconv.Atoi(params[1])

	queue := make([]int, n)
	for i := 0; i < n; i++ {
		queue[i] = i + 1
	}

	cnt := 1
	for len(queue) > 1 {
		x := queue[0]
		queue = queue[1:]
		if cnt != m {
			queue = append(queue, x)
			cnt++
		} else {
			cnt = 1
		}
	}

	fmt.Println(queue[0])
}

  

        上面就是我带给大家的代码,谢谢大家!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

竞赛真题:约瑟夫环 的相关文章

  • Mono 无法保存用户设置

    我在 Mono Ubuntu 上保存用户设置时遇到问题 这是代码示例 private void Form1 Load object sender EventArgs e string savedText Properties Setting
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 通过不同 DLL 或 EXE 中的指针或引用访问 STL 对象时发生访问冲突

    我在使用旧版 VC6 时遇到以下问题 我只是无法切换到现代编译器 因为我正在处理遗留代码库 http support microsoft com kb 172396 http support microsoft com kb 172396
  • std::bind 重载解析

    下面的代码工作正常 include
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 为什么我使用google'smtp'无法发送电子邮件?

    我有以下程序使用 smtp gmail com 587 发送电子邮件 namespace TestMailServer class Program static void Main string args MailMessage mail
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem
  • 如何使用 std::array 模拟 C 数组初始化“int arr[] = { e1, e2, e3, ... }”行为?

    注意 这个问题是关于不必指定元素数量并且仍然允许直接初始化嵌套类型 这个问题 https stackoverflow com questions 6111565 now that we have stdarray what uses are

随机推荐

  • 好的习惯

    从网上看到的一篇外文文章的翻译 感觉挺不错 分享一下 第三章 习惯一 积极主动 个人愿景的原则 人性本质是主动而非被动的 不仅能消极选择反应 更能主动创造有利环境 采取主动并不表示要强求 惹人厌或具侵略性 只是不逃避为自己开创前途的责任 最
  • Windows环境下Apache与Tomcat共存

    准备工作 1 Apache 2 2 4 下载地址 http cztele1 skycn com down apache 2 2 4 win32 x86 no ssl zip 2 Tomcat 6 0 16 下载地址 http apache
  • 计算机网络安全技术学习总结

    计算机网络安全C 1 绪论 网络安全的定义 模型 攻击手段 攻击方式 安全服务 安全机制 特定安全机制 普遍的安全机制 认识Internet上的严峻的安全形势并深入分析其根源 造成Internet安全问题的主要原因 1系统脆弱性 2自然灾害
  • 尚硅谷CSS选择器练习之餐厅练习

    此笔记来自于跟尚硅谷老师学习 此篇是对CSS选择器的总结以及视频中的P37的餐厅练习自己做的答案 自己所写 用于自我复习 P37尚硅谷 餐厅练习 https flukeout github io 目录 css选择器 1 Select the
  • 解决 kali换源之后签名无效

    报错问题 apt get update 报错 更新扩展知识 kali更新源 终端输入 vi etc apt sources list 中科大 deb http mirrors ustc edu cn kali kali rolling ma
  • C语言函数大全-- s 开头的函数(4)

    s 开头的函数 4 1 strdup 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 stricmp 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 strerror 3 1 函数说明 3 2 演示示例 3 3 运行结果
  • 时间序列之协整检验(3)

    协整检验 1 协整检验 cointegration test 2 常用的协整检验 3 研究变量之间的协整关系 对研究经济问题的定量分析有着重要的意义 5 用Eviews代码进行协整检验 4 用Python代码进行协整检验 1 协整检验 co
  • 使用扩展卡尔曼滤波(EKF)融合激光雷达和雷达数据(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 大多数自动驾驶汽车都配备了激光雷达和雷达
  • Linus谈优秀程序员的三种品质

    转自 http blog dyngr com blog 2013 09 26 junio c hamano interview 引言 今天我们的嘉宾 是分布式版本管理系统Git的主要维护者 同时也是 入门Git 一书的作者 滨野纯先生 而这
  • 某网页挂马分析

    前记 这是很早之前分析的网页挂马案例 我当时分析的也很细致 最近在整理文档时发现了它 这篇文章正好能展示出病毒从网页挂马到本机运行的完整流程 感觉还是有分享的价值的 20XX年X月XX日 XXX发现 XXX网 http www XXXXX
  • MySQL is running but PID file could not be found问题处理

    Linux中启动mysql时出现MySQL is running but PID file could not be found错误 处理方法 查询到mysql中data目录下的mysql bin index文件 find name mys
  • Spring boot运行原理-自定义自动配置类

    在前面SpringBoot的文章中介绍了SpringBoot的基本配置 今天我们将给大家讲一讲SpringBoot的运行原理 然后根据原理我们自定义一个starter pom 本章对于后续继续学习SpringBoot至关重要 了解Sprin
  • 文件共享服务器onedrive,如何共享OneDrive文件和文件夹

    仅有一点额外的存储空间就意味着要购买更大的硬盘或在库存中添加外部硬盘的日子已经一去不复返了 如今 云存储已成为必经之路 它似乎不安全 但它以更快的速度 更安全的方式发展 并且总体而言 逐年提高 而且价格相对较低 出色的云存储服务的一个很好的
  • 《数据结构与算法》期末考试

    数据结构与算法 期末考试 判断题 单选题 填空题 函数题 主观题 判断题 已知一棵二叉树的先序遍历结果是ABC 则CAB不可能是中序遍历结果 T 所谓 循环队列 是指用单向循环链表或者循环数组表示的队列 F 只有当局部最优跟全局最优解一致的
  • odoo 学习 - 权限编辑

    权限编辑 编辑security ir model access csv id name model id id group id id perm read perm write perm create perm unlink access
  • 常用电子元器件简介

    一 电阻器 电阻器 一般情况下也称电阻 是一种阻碍电流在电路中流动的线性元件 也是组成电子电路的主要元件之一 1 电阻器的作用及电路图形符号 1 电阻器的作用 电阻器主要用于控制电路中的电压和电流 除了具有降压 分压 限流和分流作用外 还具
  • VS2019实用调试技巧

    VS2019实用调试技巧 1 debug和release的区别 2 调试 1 调试最常使用的几个快捷键 2 用监视窗口查看临时变量的值 3 查看内存信息 4 查看调用堆栈 5 查看汇编信息 6 查看寄存器信息 3 如何写出易于调试 好的代码
  • maven学习总结系列

    maven学习总结系列 最近工作中需要一些maven的知识 也是想正规的学习下maven的知识点 所以才有了这次的总结 希望自己的总结能够帮助到大家 另外 我只会根据我工作中需要到的知识点进行总结 不需要的 或者我觉得没啥用的 我就不写了
  • Aligning Large Language Models with Human: A Survey

    本文也是LLM相关的综述文章 针对 Aligning Large Language Models with Human A Survey 的翻译 对齐人类与大语言模型 综述 摘要 1 引言 2 对齐数据收集 2 1 来自人类的指令 2 1
  • 竞赛真题:约瑟夫环

    Hello 这是我的新专辑 这个专辑中是竞赛真题 所有真题的解将会用Python C C Java JS和Go几种语言给大家实现 现在 开始我们的第一个竞赛题目 约瑟夫环 目录 题目内容 题目分析 题目思路 Python代码 C 代码 C代