循环删除元素,返回最后一个被删除元素的下标

输入一个整数n(n大于等于2,小于等于1000),则从i=2开始每隔两个元素在数组arr[n]中删除该元素,可以在数组中循环,请返回最后一个被删除元素的下标:

#include<iostream>
#include<vector>
using namespace std;
int search(int n){
    vector<int>visited(n,0);
    if(n==2){
        return 1;
    }
    int count=0;
    int i=2;
    while(true){
         visited[i]=1;
         count++;
        if(count==n){
           return i;
        }
       int count2=0;
       while(visited[i]==1||count2<2)
       {
           if(visited[i]==0){
            count2++;
            }
            i++;
            i=i%n;
       }
    }
}
int main(){
    int n;
    while(cin>>n){
        cout<<search(n)<<endl;
    }
}

原文地址:https://www.cnblogs.com/qiuhaifeng/p/11515375.html

时间: 2024-12-10 02:20:15

循环删除元素,返回最后一个被删除元素的下标的相关文章

18.n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4263868.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字). 当一个数字

每隔n步循环删除,返回最后一个元素

题目:有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置.以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除. 题解一: 暴力解法,模拟,一步一步来. 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 i

[Leetcode]下一个更大元素II

给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数.如果不存在,则输出 -1. 示例 1: 输入: [1,2,1] 输出: [2,-1,2] 解释: 第一个 1 的下一个更大的数是 2: 数字 2 找不到下一个更大的数: 第二个 1 的下一个最大的数需要循环搜索,结果也是 2. 注意: 输入数组的长度不会超过 10000. 思路:

[Swift]LeetCode503. 下一个更大元素 II | Next Greater Element II

Given a circular array (the next element of the last element is the first element of the array), print the Next Greater Number for every element. The Next Greater Number of a number x is the first greater number to its traversing-order next in the ar

mysql 删除语句2以及两种删除方式的区别

truncate TRUNCATE TABLE boys; TRUNCATE 和 DELETE区别: TRUNCATE 删除不能加筛选条件TRUNCATE删除后再插入是表重新开始DELETE删除后再插入,是从上次插入数据的断点开始 TRUNCATE删除没有返回值,DELETE删除有返回值 TRUNCATE 删除不能回滚,DELETE删除可以 原文地址:https://blog.51cto.com/14437184/2439977

LeetCode Remove Duplicates from Sorted Array删除整型数组中的重复元素并返回剩下元素个数

1 class Solution { 2 public: 3 int removeDuplicates(int A[], int n) { 4 int *s=&A[0],*e=&A[0]; //s指向开头第一个,e往后遍历相同的 5 int t,i,j=n; 6 for(i=1;i<n;i++){ 7 e++; 8 if(*s==*e) 9 j--; 10 else{ 11 s++; 12 *s=*e; 13 } 14 } 15 return j; 16 } 17 }; 题意:给一个

Remove Element(删除重复元素,循环删除2个及2个以上元素)

Given an array and a value, remove all instances of that value in place and return the new length. The order of elements can be changed. It doesn't matter what you leave beyond the new length. 时间复杂度O(n),空间复杂度O(1).解题思路,主要就是双指针的思想,一个为游标遍历,一个为新数组的最后一个元素

C#如何删除数组中的一个元素

C#如何删除数组中的一个元素,剩余的元素组成新数组,数组名不变double[] arr = new double[n];需要删除的是第m+1个数据arr[m]求新数组arr.(新数组arr包含n-1个元素)m,n数值已知 double[] arr = new double[50]; List<double> list = arr.ToList(); list.RemoveAt(5+1); double[] newarr = list.ToArray(); 转:http://www.zybang

最后一个被删除的元素

n个元素围成一圈,每次删除第m个元素,求最后一个被删除的元素. #include <iostream.h> #include "list" using namespace std; //使用list而非vector int findLast(int m,int n){ if(m<=0||n<=0){ return -1; } list<int> v; for(int i=0;i<n;i++){ v.push_back(i); } list<