首页 > 试题广场 >

删数

[编程题]删数
  • 热度指数:65217 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个数组 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 (删除),如此循环直到最后一个数被删除。

数据范围:

输入描述:
每组数据为一行一个整数n(小于等于1000),为数组成员数


输出描述:
一行输出最后一个被删掉的数的原始下标位置。
示例1

输入

8

输出

6
示例2

输入

1

输出

0
头像 健康快乐最重要
发表于 2020-03-15 11:37:35
vector和list和queue三种解法。 1.vector使用迭代器和erase进行删除模拟: #include<iostream> #include<vector> using namespace std; int main(){ int n,flag; 展开全文
头像 清烽
发表于 2022-05-25 22:48:32
思路:如果是第1个数和第二个数,每次都将第一个数挪到最后一位,并将第一个数删掉; 如果是第3个数(每次都删除了数,所以这个数现在也在第一位),那就只删除第一个数 第一位处理: 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0(第一个数挪到第最后一位) 1 2 3 4 5 6 7 0 展开全文
头像 清烽
发表于 2022-05-25 23:24:10
思路:如果是第1个数和第二个数,每次都将除第一个数外的其他数往前挪一位,第一个数挪到最后一位; 如果是第3个数(每次都删除了数,所以这个数现在也在第一位),那就将除第一位数外的其他数往前挪一位。 第一位处理: 0 1 2 3 4 5 6 7 1 2 3 4 5 6 7 0(记录第一位数0,除第一位数 展开全文
头像 牛客669158664号
发表于 2021-08-09 16:51:33
//递推公式:f[1] = 0 ,f[n] = (f[n - 1] + K) mod n //如果想了解:http://blog.csdn.net/taoyanqi8932/article/details/52335719#include <stdio.h>int lastNum(int 展开全文
头像 蒸蒸日上1
发表于 2022-09-03 15:34:34
这个主要是那个思想:     需要跳过2位的,然后循环调用的时候 需要(i+2)%length求余数,即下一次轮询开始的位置;
头像 MichelleWu
发表于 2023-09-26 18:47:20
#这个算法被称为"约瑟夫问题",也叫"约瑟夫斯置换"。它是一个经典的数学和计算机科学问题,源自一个古老的故事 #描述了一群人围成一个圈,每隔一定的间隔(通常是m)报数,报到一定数目的人就出列,然后重新开始报数,直到最后只剩下一个人。 while True: 展开全文
头像 罗密欧与傅里叶
发表于 2023-04-06 12:51:00
既然还没有Java的,那我先来。使用链表数据结构。难的是怎么构造环形链表,一旦构造出来就简单多了。有没有思路更简单的方法? import java.util.Scanner; public class Main { public static class List { Li 展开全文
头像 牛客632115956号
发表于 2023-03-28 08:38:36
#include <iostream> #include <vector> using namespace std; bool noZeros(vector<int> &nums){ bool no_zeros = true; for (int 展开全文

问题信息

难度:
369条回答 58133浏览

热门推荐

通过挑战的用户

查看代码