18063-圈中的游戏-(第九章第4题)-"数组指针的使用"-数学分析
代码借鉴CSDN大佬https://blog.csdn.net/weixin_41409140/article/details/88071047(对大佬的大佬代码进行分析)
18063 圈中的游戏
时间限制:1000MS 内存限制:65535K
提交次数:0 通过次数:0
题型: 编程题 语言: G++;GCC;VC
Description
有n个人围成一圈,从第1个人开始报数1、2、3,每报到3的人退出圈子。编程使用链表找出最后留下的人。
输入格式
输入一个数n,1000000>=n>0
输出格式
输出最后留下的人的编号
输入样例
3
输出样例
2
----------------------------------------------------------
思路:
/*#include <stdio.h>
#include<stdlib.h>
int c[1000000];
int main()
{ //注意了cur和pre是类似于指针,是一种咱们的“数组指针”,指向的是下标
int i,j,n,pre,cur; //pre为搞死的那个的前一个的下标,cur为搞死那个的下标
scanf("%d",&n);
if(n==1)printf("1\n"); //只有一个人都数不了(不可以自己和自己数哦)(毕竟最后是一定要留一个人的就直接输出1就好(但是输入的如果是2的话,
是可以数的了,所以就是1死,二活,所以只有输入1的时候是一个特例,不要认为输入2的时候不够三个人就也是特例了
else
{
for(i=0;i<n-1;i++) c[i]=i+1; //这里外部循环的边界可以是n也可以是n-1,甚至循环2n也是可以的,因为最后一个无论循环多少次都会存在的,就好像就只有一个人一样,是不可以自己和自己数的,所以就输出1 但是如果边界比较小的话就不能保证都筛选完了,所以最好还是n-1以上的(因为一次外部里面就有三次小的循环,每次内部循 环就搞死一个,所以要留一个,也就意味着要搞死n-1个,
所以就要n-1次外部循环才行的,所以外部循环可以是n-1次及以上的
c[n-1]=0; //就是为了方便循环(毕竟也是一个圈,最后一项一般都不是本身,一般都是为了配合圈的操作来定一个比较牛的值,来方便后续的圈操作的
cur=n-1;
for(i=0;i<n-1;i++)
{
for(j=0;j<3;j++)
{
pre=cur; //这个个循环里面其实pre就是记录之后cur指向的下标的的前一个下标的
cur=c[cur]; //核心
}
c[pre]=c[cur]; //cur的数值给了pre的数值
}
printf("%d",pre+1); //由于初始化的时候是把第一项是2,第二项是3,所以要想得到最后的数值的话
//因为我们得到的是下标pre所以就要+1才是它的数值了
}
return 0;
}
*/
无注释代码
#include <stdio.h>
#include <stdlib.h>
int c[];
int main()
{
int i,j,n,pre,cur;
scanf("%d",&n);
if(n==)
printf("1\n");
else
{
for(i=;i<n-;i++)
c[i]=i+;
c[n-]=;
cur=n-;
for(i=;i<n-;i++)
{
for(j=;j<;j++)
{
pre=cur;
cur=c[cur];
}
c[pre]=c[cur];
}
printf("%d",pre+);
}
return ;
}
#include<stdio.h>
#include<stdlib.h>
int cj(int n,int m)
{
int p=;
int i;
for(i=;i<=n;i++)
{
p+=(p+m)%i;//这个方法的话就不用单独的讨论n=1的情况了,因为在这个函数里面。如果n=1的话是不会进行循环里面的,也就是最后是会返回1的
}
return p+
}
int main()
{
int n,m;
scanf("%d",&n);
m=;
int ans;
ans=cj(n,m);
printf("%d",ans);
}
虽然方法一是很难想到的,没有像方法二那麽好理解的,但是这个方法是可以用在如果他是选的不是第1位的开始数的话就不行了呢
比如1139 约瑟夫环问题
1139 约瑟夫环问题
时间限制:500MS 内存限制:65536K
提交次数:157 通过次数:79
题型: 编程题 语言: G++;GCC
Description
约瑟夫(josephus)环是这样的:假设有n个小孩围坐成一个圆圈,并从1开始依次给每个小孩编上号码。老师指定从第s位小孩起从1开始报数,
当数到m时,对应的小孩出列,依次重复,问最后留下的小孩是第几个小孩?例如:总共有6个小孩,围成一圈,从第一个小孩开始,
每次数2个小孩,则游戏情况如下:
小孩序号:1,2,3,4,5,6
离开小孩序号依次为:2,4,6,3,1
最后获胜小孩序号:5
输入格式
每组输入是三个整数n,s,m。(1 <= n <= 30, 1 <= s <= n,1 <= m <= 10) ;
输出格式
对于每组输入,请输出最后留下小孩的序号。
输入样例
6 1 2
输出样例
5
/********这里就是m就不再是3了,所以就只用改变一下内层的for的边界即可了
然后是从s开始的话,由于上面的代码都是从1开始的,但是画图发现,从s开始的话,答案其实就是从1开始的答案再+(s-1)也就是s和1的差,因为是按序的编号的,所以是可以的
具体代码:********
#include<stdio.h>
#include<stdlib.h>
int c[];
int main()
{
int i,j,pre,n,cur,s,m;
scanf("%d %d %d",&n,&s,&m);
if(n==)
printf("1\n");
else
{
for(i=;i<n-;i++)
c[i]=i+;
}
c[n-]=;
cur=n-;
for(i=;i<=n-;i++)
{
for(j=;j<;j++)
{pre=cur;
cur=c[cur];
}
c[pre]=c[cur];
}
printf("%d",pre+s);//由于板子里面的是pre+1.然后我们要上加s-1,所以1和-1抵消了,所以就是直接的就s+pre即可了
}*/
18063-圈中的游戏-(第九章第4题)-"数组指针的使用"-数学分析的更多相关文章
- ASP.NET Core中使用GraphQL - 第九章 在GraphQL中处理多对多关系
ASP.NET Core中使用GraphQL ASP.NET Core中使用GraphQL - 第一章 Hello World ASP.NET Core中使用GraphQL - 第二章 中间件 ASP ...
- 第九章 C99可变长数组VLA详解
C90及C++的数组对象定义是静态联编的,在编译期就必须给定对象的完整信息.但在程序设计过程中,我们常常遇到需要根据上下文环境来定义数组的情况,在运行期才能确知数组的长度.对于这种情况,C90及C++ ...
- Learning Perl 第九章习题第二题
把输入文件中的所有Fred换成Larry, 不区分大小写. 知识点 1. 文本文件读写 2. 简单的正则替换 3. unless 的用法 4. $_ 的用法
- DirectX12 3D 游戏开发与实战第九章内容(上)
仅供个人学习使用,请勿转载. 9.纹理贴图 学习目标: 学习如何将局部纹理映射到网格三角形上 探究如何创建和启用纹理 学会如何通过纹理过滤来创建更加平滑的图像 探索如何使用寻址模式来进行多次纹理贴图 ...
- 第九章 C语言在嵌入式中的应用
上章回顾 编码的规范和程序版式 版权管理和申明 头文件结构和作用 程序命名 程序注释和代码布局规范 assert断言函数的应用 与0或NULL值的比较 内存的分配和释放细节,避免内存泄露 常量特性 g ...
- 第九章 MySQL中LIMIT和NOT IN案例
第九章 MySQL中LIMIT和NOT IN案例 一.案例的项目 1.创建数据库语句: #创建数据库 CREATE DATABASE `schoolDB`; USE `schoolDB`; #创建学生 ...
- CentOS7安装CDH 第九章:CDH中安装Kafka
相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...
- 通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile
通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁 ...
- 精通Web Analytics 2.0 (11) 第九章: 新兴分析—社交,移动和视频
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第九章: 新兴分析-社交,移动和视频 网络在过去几年中发生了不可思议的发展变化:从单向对话到双向对话的转变; 由视频,Ajax和 ...
随机推荐
- 在元素上写事件和addEventListent()的区别
在元素上写事件和addEventListent()的区别1. onclick添加事件不能绑定多个事件,后面绑定的会覆盖前面的.而addEventListener能添加多个事件绑定,按顺序执行.2. a ...
- Sublime Text 3 安装 Package Control 结果返回 275309,找不到 Install Package
打开 Preferences->Settings , 查看 ignored-packages 数组中是否有 Package Control,如果有,删除即可.
- Java常见的异常,Java运行时异常和一般异常的区别
Java常见的异常,Java运行时异常和一般异常的区别 异常和错误二者的不同之处: Exception: 1.可以是可被控制(checked,检查异常) 或不可控制的(unchecked,非检查异常) ...
- ubuntu12.04 添加程序启动器
方法: 1. 在/usr/share/applications目录下创建eclipse启动器配置文件 cd /usr/share/applications vim eclipse.desktop 2. ...
- 设计模式C++描述----16.状态(State)模式
一. 举例 一般汽车发动机工作时有四种状态,吸气.压缩.做功和排气. 在运行时,不同的状态会有不同的行为,当前的状态机在适当的时候会过渡到下一状态. 其实用户在使用时根本不知道当前的状态,也无需知道当 ...
- 基于 HTML5 + WebGL 实现 3D 可视化地铁系统
前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...
- postman的基本用法,请求,断言,环境变量
postman基本用法 Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件. 它提供功能强大的 Web API & HTTP 请求调试. 它能够发送任何类型的HTT ...
- java 时间戳 、时间差计算(秒、分钟、小时、天数、月份、年)
以下代码就是时间差计算(秒.分钟.小时.天数.月份.年) package me.zhengjie; import java.text.ParseException; import java.text. ...
- 5、pytest -- 猴子补丁
目录 1. 修改函数功能或者类属性 2. 修改环境变量 3. 修改字典 有时候,测试用例需要调用某些依赖于全局配置的功能,或者这些功能本身又调用了某些不容易测试的代码(例如:网络接入).fixture ...
- Maven配置setting.xml详细说明
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...