代码借鉴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题)-"数组指针的使用"-数学分析的更多相关文章

  1. ASP.NET Core中使用GraphQL - 第九章 在GraphQL中处理多对多关系

    ASP.NET Core中使用GraphQL ASP.NET Core中使用GraphQL - 第一章 Hello World ASP.NET Core中使用GraphQL - 第二章 中间件 ASP ...

  2. 第九章 C99可变长数组VLA详解

    C90及C++的数组对象定义是静态联编的,在编译期就必须给定对象的完整信息.但在程序设计过程中,我们常常遇到需要根据上下文环境来定义数组的情况,在运行期才能确知数组的长度.对于这种情况,C90及C++ ...

  3. Learning Perl 第九章习题第二题

    把输入文件中的所有Fred换成Larry, 不区分大小写. 知识点 1. 文本文件读写 2. 简单的正则替换 3. unless 的用法 4. $_ 的用法

  4. DirectX12 3D 游戏开发与实战第九章内容(上)

    仅供个人学习使用,请勿转载. 9.纹理贴图 学习目标: 学习如何将局部纹理映射到网格三角形上 探究如何创建和启用纹理 学会如何通过纹理过滤来创建更加平滑的图像 探索如何使用寻址模式来进行多次纹理贴图 ...

  5. 第九章 C语言在嵌入式中的应用

    上章回顾 编码的规范和程序版式 版权管理和申明 头文件结构和作用 程序命名 程序注释和代码布局规范 assert断言函数的应用 与0或NULL值的比较 内存的分配和释放细节,避免内存泄露 常量特性 g ...

  6. 第九章 MySQL中LIMIT和NOT IN案例

    第九章 MySQL中LIMIT和NOT IN案例 一.案例的项目 1.创建数据库语句: #创建数据库 CREATE DATABASE `schoolDB`; USE `schoolDB`; #创建学生 ...

  7. CentOS7安装CDH 第九章:CDH中安装Kafka

    相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...

  8. 通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile

      通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁 ...

  9. 精通Web Analytics 2.0 (11) 第九章: 新兴分析—社交,移动和视频

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第九章: 新兴分析-社交,移动和视频 网络在过去几年中发生了不可思议的发展变化:从单向对话到双向对话的转变; 由视频,Ajax和 ...

随机推荐

  1. ESP8266开发之旅 网络篇⑮ DNSServer——真正的域名服务

    1. 前言     Arduino for esp8266中有两个DNS服务相关的库: ESP8266mDNS库 这个库是mDNS库,使用这个库的时候ESP8266可以在AP模式或是以STA模式接入局 ...

  2. .NET Core System.Drawing.Common 中文乱码的坑

    最近在写一个汉字取点阵的程序,最开始是在win环境下运行的,没发现什么异常,然后今天把程序放在centos 下后发现英文正常,中文完全变成两位的字了,最开始是字体的原因 在把宋体等安装到centos ...

  3. jQuery选择器 大于 空格 波浪线 加号

    JQuery选择器 大于 空格 波浪线 加号的区别 元素遍历 符号 说明 空格 $(‘parent child’)表示获取parent下的所有的child节点(所有的子孙). 大于号 $(‘paren ...

  4. OptimalSolution(5)--数组和矩阵问题(1)简单

    一.转圈打印矩阵 题目:给定一个整型矩阵matrix,按照转圈的方式打印它. 要求:额外空间复杂度为O(1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为: ...

  5. Apache Solr Velocity模板注入RCE漏洞复现

    Apache Solr Velocity模板注入RCE漏洞复现 一.Apache Solr介绍 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于web-service的API接口,用户可以通 ...

  6. API 网关知识看这篇就足够了!

    本文已经收录自 JavaGuide (60k+ Star[Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.) 本文授权转载自:https://github.com/java ...

  7. 入职第一天,装环境 .Ubuntu装jdk1.8,装idea 及tomcat

    入职第一天,和之前公司的开发环境感觉天壤之别了,不过万变不离其宗,之前公司eclipse+widows.所以很少玩linux了.今天来就干了一件事.装环境 jdk安装. 下载地址:https://ww ...

  8. PostgreSQL的模式、表、空间、用户间的关系

    在平时的工作中,我们经常接触到数据库表和用户以及角色的使用,由于经常使用默认的数据库表空间和模式(Schema),所以我们往往忽略了数据库表空间和模式的概念以及作用. 接下来,先介绍一下模式和表空间的 ...

  9. 8.3 NOIP CE反思

    lsc考完以后就CE了,然后滚回去吃*去了! 这次考试都比的一批,整个先是打了暴力然后对拍发现桶有可能炸内存,然后就打了一个hash-map然后......T1 T3全使用了它,结果: 没什么可说的了 ...

  10. <深圳千锋学习>day01

    2019.11.11     深圳千锋H5前端学习笔记