XTU-OJ 1432-Cycle

XTUOJ:XTU在线评审系统 湘潭大学OJ系统 前言 关于合理的逻辑:湘潭大学OJ系统是基于vue2.0的vue-cli脚手架应用。应用所需要的到用的功能会试图包装为组件,保证在需要的时候能够更加方便的补充。 关于变量名:该应用的数据变量名,方法名等于JS有关的变量名全部采用小驼峰命名(如handleSearch,handleReset),类名,ID等与CSS有关的变量名采用短横线分隔样式命名(如inline-element)。 关于合作和维护:该应用程序会在github开源,链接为 使用组件/框架 Vue vue应用的核心。 Vue路由器 为vue提供路由管理器,它可以实现在导航栏更换router来切换页面。 威克斯 vue仓库,可以存储vue的状态数据 蚂蚁设计 一个组件库,可以快捷,高效,实用性强地开发应用 大师编辑 一个富文本编辑器,可以实现markdown文档输入,html文档输入和mathjax输入 立即下载
AI摘要

文章介绍了如何使用数组链表的方法解决一个计数问题,给定n个数字形成一个圆圈,按照特定规则删除数字,直到只剩下一个。文章提供了两种方法实现,一种是数组链表,另一种是更新数组法。

题目描述

数字 1∼n顺时钟排成一个圈,从1开始顺时钟计数,数到的数退出这个圈,然后从下一个数字开始数,直到剩下最后一个数字。 计数的序列为{a1,a2,…,an−1}, 其中 ai=(ai−1+ai−2)%n+1,i>2 且 1≤a1,a2≤n。

比如n=5,计数序列的前两项为{1,2}时,整个计数序列为{1,2,4,2},那么第一次去掉数字1,得到数字圈为{2,3,4,5}; 再从2开始,数两个数,到数字3,去掉得到数字圈为{4,5,2};依次,再数4个数,到数字4,去掉得到数字圈为{5,2};最后数2个数,去掉2,剩下5。

请你写个程序,在已知n,a1,a2的情况下,求最后剩下的数?

输入

第一行是一个整数T(1≤T≤1000),表示样例的个数。

以后每行一个样例,为三个整数n(2≤n≤1000),a1,a2(1≤a1,a2≤n)。

输出

每行输出一个样例的结果。

样例输入

2
3 2 3
5 2 3

样例输出

1
4

解题思路:本题是把n个数排成一个圆,每次循环去掉一个数。依次循环找到最后剩下的数。第一反应是用链表的方法来解,但大家可能还不太熟悉 指针和结构体,所以这里用了 另一个链表方法:数组链表。(但是还是推荐大家去学一下指针和结构体,就算下面的数组双向链表,也用结构体数组写比较好。)

typedef struct List
{
    int num;      // 数字
    int head;     // 前置节点  题目中的 books[][0];
    int tail;     // 后置节点 == 题目中的 books[][1];
}list[1010];

数组链表: 用二维数组模拟双向链表,books[][0],保存当前数前一个数是多少,books[][1]保存当前数 后一个数是多少 。 比如下图,books[1][0] = 4, books[1][1] = 2 ,表示数字1 前一个数 是4,后一个数是2; books[3][0] = 2, books[3][1] = 4,表示数字3 前一个数 是2,后一个数是4。

现在假如 删除了数字2,那么1后面就接的是3了,3前面一个数就是1了。所以要更新二维数组,books[1][1] = 3, books[3][0] = 1。 这样我们就实现了题目中 去掉对应数字 这一步。

题外话:这是不是很简单就实现了元素删减,但上面为什么还说推荐用结构体数组呢?因为这题,恰好 初始的数字序列和数组下标对的上,是用 1、2、3、4、·····、n-1、n 这么递增上去的,和数组第一维的下标变化一致。但如果现在改变一下题目:圆圈是由各个奇数 1、3、5、······、n-2、n组成的,那么用这种二维数组还方便吗?如果用结构体,直接就可以用 list[i].num 存下每个数值。

AC代码:

方法一:数组链表

#include <stdio.h>

int T,n,end;
int ai[1010],books[1010][3] = {0};
int main()
{
    scanf("%d",&T);
    while ( T --)
    {
        scanf("%d %d %d",&n,&ai[1],&ai[2]);
        books[1][0] = n, books[n][0] = n-1;          // 初始化链表
        books[1][1] = 2, books[n][1] = 1;
        for (int i = 2; i < n; i ++){
            books[i][0] = i-1; books[i][1] = i+1;
        }
        for (int i = 3; i < n; i ++)                 // 把每一轮要走的步数算出来
            ai[i] = (ai[i-2]+ai[i-1])%n + 1;
        end = 1;                                     // 初始在 数字1 位置上
        for (int i = 1; i < n; i ++)                 // 开始删除“圆圈”里的数
        {
            for (int j = 1; j < ai[i]; j ++)         // 走ai[i] 步
                end = books[end][1];                
            books[books[end][0]][1] = books[end][1]; // 更新链表
            books[books[end][1]][0] = books[end][0];
            end = books[end][1];
        }
        printf("%d\n",end);
    }
    return 0;
}

方法二:更新数组法

#include <stdio.h>

int T,n,end,len;
int ai[1010],books[1010] = {0};
int main()
{
    scanf("%d",&T);
    while ( T --)
    {
        scanf("%d %d %d",&n,&ai[1],&ai[2]);
        for (int i = 1; i <= n; i ++)        // 初始化
            books[i] = i;
        
        for (int i = 3; i < n; i ++)
            ai[i] = (ai[i-2]+ai[i-1])%n + 1;
        end = 1, len = n;                       // len表示当前数组长度
        for (int i = 1; i < n; i ++, len --)    // 循环n-1次,相当于走n-1步
        {
            end = (end+ai[i]-1)%len;            // 直接定位到该轮 该删去数 的位置
            if (end == 0)  end = len;
            for (int j = end; j < len; j ++)    // 把删去数后面的所有数往前移(更新数组)
                books[j] = books[j+1];
            if (end == len) end = 1;
        }
        printf("%d\n",books[1]);                // 最后只剩下books[1],就是目标数了
    }
    return 0;
}

【Java核心高阶进阶】44-Java8核心新特性 模块十:Java新特性演进 · 第 1 篇Java 8 是 Java 语言历史上最重要的一次发布,它引入的函数式编程范式从根本上改变了 Java 的编码方式。即便到了 JDK 21 的今天,Lambda、Stream、Optional 仍是日常开发的高频工具。本篇将深入这些特性的语法、原理与底层机制,帮助你不仅会用,更知其所以然。 阅读详情

相关推荐

Python逆向爬取Tik Tok,MsToken,X-Bogus以及signature

tiktok作为字节海外的自媒体平台,具有很非常大的价值,本文旨在教会大家实现Tik Tok的签名获取以及数据的最终爬取。

weixin_74305707的博客 3270

XTU 1256湘潭大学

** Description ** 湘潭大学 题目描述 湘潭大学简称“XTU”,作为即将成为湘大的一份子,怎么不能为湘大添砖加瓦了?现在给你一个字符串,请你计算一下,从中选取字符,最多能组成多少个“XTU”? 输入 第一行是一个整数K,表示样例的个数。 以后每行一个字符串,字符串只包含英文大写字母,长度不会超过1000。 输出 每行输出一个样例的结果。 样例输入 3 XTUUTX ABCDEFGH...

oslowwalker的博客 1875

MDK5 Debug调试方法总结

MDK5 Debug调试方法总结

m0_70748084的博客 2万+

XTU-OJ 《C语言程序设计》作业1-数学计算

前面两章主要是起一个接引的作用,所以题解的代码过程作者尽量写的详细一些,并且把每个题都讲解一遍。大家应该自己先练练手,不要直接copy。后面的就不把所有题目都做题解啦,就挑出一些比较困难的题目给出题解,相对的题解也会更详细,会说说作者自己的思路,不会直接贴代码。希望大家在C语言和之后的学习道路上过得快乐且充实。

Jay_is_Chou的博客 873

CSP-J 入门级第一轮认证 2025 详细解析

2025年CSP-J入门级第一轮认证模拟赛提供10套免费试题,含选择题与解析。选择题涉及计算机科学基础,如32位无符号整数最大值计算(约42.9亿,选A)、C++位运算(255&254=254,选B)、递归函数分析(calc(5)=6,选B)、哈夫曼树构造(带权路径长度186,选B)等。其他题目涵盖图论(有向图边数等于入度/出度和,选B)、组合数学(120种选法,选C)、布尔逻辑(选项C不恒等)、模运算周期性(f[2025]=6,选D)、C++字符串特性(支持string+char,选B)及引用传参

lan_in的博客 2939

【OpenCV-Python】图像的载入、显示和输出(imread()、imshow()、waitKey()、namedWindow()、imwrite())

图像的载入:imread()函数 imread()函数可以用来非常便捷地读取文件中的图片到Opencv中。这个函数一般需要两个参数: (1)载入图片的路径名。如果图像文件在工程文件夹下,可以直接用文件名读取,如“cat.jpg”,否则需要输入完整的访问路径,如“D:\\test\\lena.png”。这里还有几个tips: imread函数中,一个点代表省略当前文件夹路径,两个点则代表回...

M&Q的博客 1397

XTU OJ 1256 湘潭大学

湘潭大学简称“XTU”,作为即将成为湘大的一份子,怎么不能为湘大添砖加瓦了?现在给你一个字符串,请你计算一下,从中选取字符,最多能组成多少个“XTU”?第一行是一个整数K,表示样例的个数。以后每行一个字符串,字符串只包含英文大写字母,长度不会超过1000。题目比较简单,就是输出'X''T''U'中三个字符出现的最小次数。每行输出一个样例的结果。

2301_77580973的博客 1043

EMC辐射发射测试:垂直与水平极化测试原理与实战指南

电磁兼容(EMC)测试是确保电子设备在复杂电磁环境中稳定运行的关键环节,其核心在于评估设备产生的电磁干扰(EMI)强度。辐射发射测试作为EMC测试的重要组成部分,通过测量设备向空间辐射的电磁噪声,判断其是否符合国际标准限值。测试原理基于电磁波的极化特性,即电场矢量的振动方向,主要分为垂直极化和水平极化。理解极化特性对于精准定位辐射源、高效进行EMC整改具有重要技术价值。在工程实践中,垂直极化噪声通常源于线缆辐射等垂直结构,而水平极化噪声多来自PCB走线等水平结构。通过分别测量两种极化方向的辐射最大值,可以全

weixin_32770423的博客 353

约瑟夫环问题即多种解法

问题引言: 约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。 首先,当学习过约瑟夫环问题后,我向大家推荐一道力扣上的题目圆圈中最后剩下的数字,大家可以拿这道题来练练手。 力扣上的题目描述: 0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这...

追梦少年ML的博客 1411

halcon知识:常见三种模板匹配方法总结

halcon的三种模板匹配方法总结,halcon有三种模板匹配方法:即Component-Based、Gray-Value-Based、Shaped_based,分别是基于组件(或成分、元素)的匹配,基于灰度值的匹配和基于形状的匹配,此外还有变形匹配和三维模型匹配也是分属于前面的大类 本文只对形状匹配做简要说明和补充: Shape_Based匹配方法: 上图介绍的是形状匹配做法的一般流程及模板制作的两种方法。 先要补充点知识:形状匹配常见的有四种情况 一般形状匹配模板shape_model、线性变

gongdiwudu的专栏 4万+

汽车电子RTOS--AUTOSAR OS

AUTOSAR OS(AUTomotive Open System ARchitecture Operating System)是AUTOSAR(汽车开放系统架构)标准中的一个重要组件,它是一个专门为汽车电子控制单元(ECU)设计的实时操作系统(RTOS)。AUTOSAR OS旨在提供一个标准化的软件平台,以促进不同供应商和汽车制造商之间的组件复用和协同开发,提高软件质量和降低成本。

MHD0815的博客 1797

XTU-OJ 《C语言程序设计》 1271-Color

Alice在玩一个游戏,她在一个m×n的格子里,随机涂黑k个格子。然后她每次可以把一行或者一列的格子染成红色,但是这一行中不能有黑色的格子。请问她最多能把多少个格子涂成红色?

Jay_is_Chou的博客 867

关于如何在matlab中导入并翻译Hypemesh导出的大型刚度矩阵txt文本

如何将它翻译成matlab可以使用的矩阵变量,并参与运算。 由于这个大型刚度矩阵125万x125万≈1e12。matlab甚至其他计算软件无法保存这个大的一个矩阵文件。而这个刚度矩阵作为稀疏矩阵其中非零元素的数目只有有500多万。采用sparse稀疏矩阵技术是可以保存。 这里简单介绍一下这个Hypemesh导出的大型刚度矩阵txt文本。如图DMIG开头的标识符是换行符,后面两列是表示这条非零元素在刚度矩阵中列数的信息。我们已经将左边字母和符号等批量删除,得到了右边textread函数可以...

wenyusuran的专栏 1795

XTU OJ 最大的数

所以我们按顺序分别存奇数与偶数,两个指针分别指向两个数组,偶数与奇数比较,较大的一方先打印,并且指针前移。易知奇数可以放到所有在其前面小于它的连续偶数之前,而不能放到在其前面的奇数之前。

2401_82933188的博客 236

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

XTU OJ 2024 下学期作业 0x0B - 筛法,前缀和

XTU OJ 2024 下学期作业 0x0B - 筛法,前缀和

WONDON 的个人博客 1525

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

XTU-OJ 1251-Colombian Number

这题就是暴力枚举咯,从小到大一个一个试,验证 n 是否等于 k+(k的数码和)。这里我就多预处理的一下, n 最大值是 1e9, 那么 k 的数码和最大是 Ksum = 999999999 = 9*9 = 81. 如果 n-Ksum > 0,说明 k < 81 时,是不存在 这样的 k 的。所以从 Max(0,n-kSum) 开始。对于正整数n,不存在整数k,使得n等于k加上k的数码累加和,我们称这样的数是哥伦比亚数或者自我数。第一行是一个整数K(K≤10,000),表示样例的个数。

Jay_is_Chou的博客 673

XTU OJ (一) 位运算专题

XTU OJ 位运算专题

WONDON 的个人博客 1708

XTU-OJ 1372 X

我是将一个正方形的二维数组全部赋值为空格,再将对应位置的空格改为字母,最后整体输出二维数组,最后的空格就无法删去,看别人的做法应该都是直接输出,不用储存,这样时间复杂度也会低很多。这是自己写的,图形可以打印正确,但因为题目要求行尾无空格,不太会解决,所以提交还是PE。试着敲了一下又可以了 😅😅😅 将最后输出的代码加一个限制条件即可。输出一个"X"型字符图形,给定字符为。每行一个字符c,字符只含大写字母。按顺序输出每个样例的对应结果。注意输入中回车也是字符!

m0_65185750的博客 445

xtuoj 时间

关于取余以及时间的表示格式00:00:00,位数不足前面补0的输出表达。

m0_73276358的博客 306

xtu oj 奇偶数位

一个整数𝑛=𝑎𝑘,𝑎𝑘−1,⋯,𝑎1―,取它的奇数位和偶数位组成两个新的数𝑚0和𝑚1,新的𝑛=𝑚0×𝑚1。不断迭代这个过程,直到𝑛成为1位数。比如𝑛=123, 13×2=26, 6×2=12, 2×1=2,一共迭代了3次。思路:每次将n将每一位数存入数组奇数位和偶数位一次组合,直到n只有1位停止。第一行是一个整数𝑇 (1≤𝑇≤10000),表示样例的个数。每行输出一个样例的结果,为一个整数,即迭代的次数。每个样例占一行,为一个整数𝑛 (1≤𝑛≤109)现在给你一个𝑛,请计算这个过程需要迭代多少次?

2301_76691871的博客 600

XTU-OJ 1246-Matrix Transposition

矩阵转置就是把原矩阵A的所有元素aij转成矩阵B的bji。现实中,大部分的矩阵都是稀疏的,所以,存储矩阵时,我们可以只存储存储每个非零元素的坐标和值,并且按行优先排序。用结构体保存矩阵的 <X,Y,V>,并在输入的时候,直接对矩阵的(X,Y)进行转置。每个样例的第一行是三个整数N,M,K,1≤N,M≤1000,1≤K≤10000,分别表示矩阵的行数,列数,非零元素个数。以后的K行,每行三个整数X,Y,V,0≤X<N,0≤Y<M,−100≤V≤100,表示元素的行,列,值。

Jay_is_Chou的博客 769

xtu oj 不定方程的正整数解

这个样例去思考,我凑了一下,发现直观地算找出这四个答案组数不是那么好找。,我就在想计算机需要循环去思考,从小到大去循环,那么我们再观察给的表达式,,我其实最开始注意了,可能漏了一些变量,直接。的倒数大,才能找到正整数解,同理。首先直观地理解这个题目的意思,用。大,分子相同分母越大,分数越小。,需要满足的条件是正整数,并且。需要注意的代码细节是需要使用。的取值是有一个范围的,从。,以这个作为出发点,把。

夜空像是一片紫水潭,星星是些不动的大亮点,夜风是些浅蓝色的流线,云端传来喧嚣的声音。 1539

XTU-OJ 《C语言程序设计》 1223-Repeat One

如果有 X % M == 0,是不是就表明,X 可以被M整除,那么就存在这样的一个N,满足题目要求。我们先思考--问题2:随着N的增大, X 会从 1 、11、111 增大到 111···111,X 会逐渐变得很大很大,大到计算机都表示不出来,那我们有没有什么方法可以防止出现这种情况呢?所以如果在前M轮中,没有判断出 X % M == 0,那么之后X如何增加,都是无法得出 X 能被 M 整除这个结论的。当 N = 2 时, 判断 11 % 3 == 0,如果是,则找到最小的N,不是则 N+1。

Jay_is_Chou的博客 793

xtu oj 连接字符串

最后总结一下:这题思路比较直观,找公共的元素,代码细节比较多,一个是要求输出字典序小的,第二是前面字符串要枚举完最后一个元素才算满足条件,第三是两个字符串可能完全没有公共部分,需要特判。

夜空像是一片紫水潭,星星是些不动的大亮点,夜风是些浅蓝色的流线,云端传来喧嚣的声音。 2354

xtu oj 马里奥

依次每行输出一个样例的结果,为一个整数。如果就算去掉所有的砖块,都不能阻止马里奥,输出-1。

m0_75005390的博客 504

XTU OJ(三)递归(分治、dfs、回溯)专题

XTU OJ 递归(分治、dfs、回溯)专题

WONDON 的个人博客 1307

Echo (湘潭大学OJ)

“湖南华园科技杯”第4届湘潭市程序设计比赛暨2012ACM/ICPC湘潭邀请赛(Semilive) http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1144 Echo Accepted : 135   Submit : 469 Time Limit : 1000 MS

hackerzchao 8594
上一篇: XTU-OJ 1163-ASCII
下一篇: XTU-OJ 1239-2048
Jay_is_Chou
博客等级 码龄5年 517粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值