首页 > 其他分享 >报数问题

报数问题

时间:2022-10-17 20:05:16浏览次数:59  
标签:指向 int 元素 问题 ++ 添加 数组 报数

有N(n<100)个小朋友,这N个小朋友围坐成一圈,从任意一位小朋友开始报数,第一位报1,当数字为3时,该小朋友出列,继续从1开始报数,以此循环下去,剩余最后一人为队长。

算法核心思路:

设置一个动态数组,便于进行元素的添加和删减

设置一个计数器p,指针j指向对应数组的元素,

当p加一时,j就向右移动一个元素;

当p为3的倍数时,就删除j所指向的元素,

当j指向数组的最后一个元素时(在此之后j会一直指向最后一个元素),在数组末尾添加数组未被删除的第一个元素;

继续p+1;j+1;

此时j又指向了数组的最后一个元素,在数组末尾添加数组未被删除的的第二个元素,

以此下去,最终推送的必然是剩下的最后未被删除过的一个元素,此时j所指向的元素的值就会等于添加的元素的值。二者相邻。

报数问题_报数问题


#include <vector>
#include <iostream>
using namespace std;

int main()
{
int n;
int p = 2, j = 1;//这里取这个值是为了便于在while处进行判断
int t = 0;//t在添加元素处需要运用到
cin >> n;
vector<int>a;
for (int i = 1; i <= n; i++)a.push_back(i);
if (n == 1)cout << a.back();
while(a.back()!=a[j])//直到最后一位与前一位相等时说明此时只剩下最后一个未被删除的数了
{
p++;
j++;
if (p % 3 == 0)
{
auto b = a.erase(a.begin() + j );
j--;
}

if (j==a.size()-1)
{
a.push_back(a[t++]); //添加过之后c就不是最后一项了,必须再经过一次循环j++后才会指向最后一项

}
}

cout <<a.back() << endl;

return 0;
}


标签:指向,int,元素,问题,++,添加,数组,报数
From: https://blog.51cto.com/u_15784515/5764139

相关文章

  • 数字保留两位小数,处理精度问题
    在vue的filters中添加数字处理的方法priceFilter(val){val=Math.round(val*100)/100constvalStr=val.toString()if(valStr.indexOf('.')===-1)ret......
  • linux常见问题
    1,使用python的时候发现pipinstallnumpy 报错:-bash:pip:未找到命令2,于是安装pip:wgethttps://bootstrap.pypa.io/pip/2.7/get-pip.py结果报错:-bash:wget:......
  • CPU飙高问题排查,从linux到java代码
    第一步:top监测进程资源占用情况,获取异常进程编号。这一步可以获得异常占用进程号。第二步:psH-eopid,tid,%cpu|grepxxxx  H打印线程以及进程信息,-eo打印指定的字......
  • 解决node环境下SyntaxError: Cannot use import statement outside a module的问题
    问题今天刷leetcode的时候,发现有些函数老是重复书写,于是单独写了一个uitls.js模块,通过import的方式导入,没想到居然报错了。解决方案错误警告其实已经给出了解决方案,在pac......
  • aspose工具word转pdf文件,在linux服务器上出现内容乱码问题
    1、先看问题的出现:功能是这样滴:上传一个word文件,然后把word文件转成pdf,保存在服务器上,然后打开服务器上的pdf文件地址,在线查看文件出现内容乱码,如下:   2......
  • 解决vuex刷新页面数据丢失问题(数据持久化)
    1、为什么刷新页面vuex的数据会丢失刷新页面vuex的数据会丢失属于正常现象,因为JS的数据都是保存在浏览器的堆栈内存里面的,刷新浏览器页面,以前堆栈申请的内存被释放,这就是......
  • 关于异常-git日常开发问题
    问题解决方法      是.husky下面的pre-commit已经存在了删除掉这个pre-commit文件再从stash里把内容Apply拿出来提交就可以了 ......
  • 解决Echarts的toolbox只显示英文的问题
    我们为toolbox中每一个配置项都添加title属性,title属性的值就是你想显示的值,随便写。toolbox的配置代码如下:toolbox:{//工具栏show:true,......
  • document.getElementById二次获取dom节点问题
    最近发现了个问题就是通过id获取dom节点不能二次获取只能首次获取并且不能当作基础节点二次获取也就是id不能这样使用今天才发现以前一直认为可以的原因不知a=docum......
  • HashMap的尾部遍历问题 (Tail Traversing)
    JDK1.7的HashMap在实现resize()时,新table[]的列表采用LIFO方式,即队头插入。这样做的目的是:避免尾部遍历。避免尾部遍历是为了避免在新列表插入数据时,遍历到队尾的位置。因......