【算法】 最近面试遇到的一道报数出队列的题

题目 : 有n(正整数)个数排成一列,一个挨一个报数,当报的数能被x(x>0)整除时,移除该数,直到数列中只有一个数,求该数的一开始的位置

解答

 public static int Demo(int n, int x)
        {
            if (n <= 0)
            {
                throw new Exception("n为正整数,请输入正确的数字");
            }
            if (x <= 0)
            {
                throw new Exception("x必须大于0,请输入正确的数字");
            }
            var queue = new Queue<int>();
            for (int i = 1; i <= n; i++)
            {
                queue.Enqueue(i);
            }
            var times = 1; // 这是报的数
            while (queue.Count >= 2)
            {
                var temp = queue.Dequeue();
                if (times % x != 0) //能被x整除的移除队列,不能整除的再加入队列
                {
                    queue.Enqueue(temp);
                }
                times++;
            }
            return queue.Dequeue();
        }
时间: 2024-10-13 02:01:43

【算法】 最近面试遇到的一道报数出队列的题的相关文章

C/C++ 数据结构之算法(面试)

数据结构中的排序算法. 排序算法的相关知识: (1)排序的概念:所谓排序就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来. (2)稳定的排序方法:在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的.相反,如果发生改变,这种排序方法不稳定. (3)排序算法的分类(分为5类):插入排序.选择排序.交换排序.归并排序和分配排序. (4)排序算法两个基本操作:<1>比较关键字的大小. <2>改变指向记录的

算法和面试

因为去年坑爹的创业失败了,所以在年底就预备开始找工作.对于公司我最看重Google,13年底面过一次,挂得十分惨烈,这次正好有时间,就打算好好准备一下.面试的核心在于算法,对于Google尤为如此.刷题是不用说的了,我的leetcode注册了两三个账号,刷了七八遍,脑子都刷糊了,当然受益也不少,还有geekforgeeks作为补充,只要把这两个吃透,基本上所有的面试都可以轻松拿下. 在经过了三个多月的精心准备,年后我信心满满的从家里回到北京的住处,与Google的HR约好面试时间,然后就是电话面

C/C++ 排序&amp;&amp;查找算法(面试)

一.排序 1.冒泡排序 1 void BubbleSort(int array[],int n) 2 { 3 int i=0; 4 int j=0; 5 int temp=0; 6 int flag = 0; 7 for(i=0;i<n - 1 ;i++) /*外循环控制排序的总趟数*/ 8 { 9 flag = 0; /*本趟排序开始前,交换标志应为假*/ 10 for(j=n-1;j > i;j--) /*内循环控制一趟排序的进行*/ 11 { 12 if(array[j] < ar

技术面试老是有劲使不出,该怎么办?

又到了一年金三银四,回想到很多年前我刚参加工作时的面试经历,那时都是呆呆地等着面试官问问题,被问到一些自己并不熟悉的问题时要不就是思考半天也切不中要点,要不就只能无奈地回答并不清楚了.其实不管是经验不足的初级开发,还是面临更高要求的资深开发,在面试上都会有一样的困扰:如何在掌握的知识有限的情况下,完成好一场高质量的面试呢? 本文最适合以下几种情况的同学参考: 知识面有限的初学者 希望首次加入大公司的开发同学 面临技术深度要求的开发同学 虽然文中主要以后端开发为例介绍技术面试的准备方法,但是和其他

一道超级坑爹的水题(ACdream oj 无耻的出题人)

 A - 无耻的出题人 Time Limit: 2000/1000 MS (Java/Others)      Memory Limit: 65536/32768 KB (Java/Others) Submit Status Problem Description 听到X神要参加比赛,只会Fibnacci数的出题人被吓得哭晕在厕所.为了防止X神AK(ALL KILL)比赛题目,无耻的出题人只好在题面上做些手脚(加密).其中一道题的题目描述如下: hjxh dwh v vxxpde,mmo i

C++算法之 用两个栈实现一个队列

算法思路: 一个栈用来入队列,一个栈用来出队列: 现有两个栈s1 和s2:s1用来入栈,比如  队列进入  1 2 3 4 5 那么s1进栈 1 2 3 4 5 ,现在要出队列,意思就是要1先出来: 那么我们把栈s1的数据取出来都压到栈s2当中,那么栈s2就是 5 4 3 2 1 :s2再出栈,此时1出栈就模拟出出队列的效果: 编写代码: // QueueFrom2Stack.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include &l

【常用算法思路分析系列】栈和队列高频题集(修改版)

本文是[常用算法思路分析系列]的第三篇,分析栈和队列相关的高频题目.本文分析:1.可查询最值的栈:2.用两个栈实现队列的功能:3.反转栈中元素:4.排序栈中元素:5.滑动窗口问题. 本系列前两篇导航: [常用算法思路分析系列]排序高频题集 [常用算法思路分析系列]字符串高频题集 1.可查询最值的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 思路: 定义两个栈stackData和stackMin,其中stackData用来存放进栈的数据,stackMin用来存放进栈过

【数据结构】用C++编写队列及基本操作(包括插入,出队列,摧毁,清空等等)

//[数据结构]用C++编写队列及基本操作(包括插入,出队列,摧毁,清空等等) //头文件 #ifndef _SEQ_STACK_ #define _SEQ_STACK_ #include <iostream> using namespace std; template <class Type> class Queue { public: Queue(size_t sz = INIT_SIZE) { capacity = sz > INIT_SIZE ? sz : INIT_

一道简单的递推题(快速幂+矩阵乘法优化+滚动数组)

问题 F: 一道简单的递推题 时间限制: 1 Sec  内存限制: 128 MB提交: 546  解决: 48[提交][状态][讨论版] 题目描述 存在如下递推式: F(n+1)=A1*F(n)+A2*F(n-1)+...+An*F(1) 求第K项的值对1000000007取模的结果 输入 单组测试数据 第一行输入两个整数 n , k (1<=n<=100,n<k<=10000000000) 第二行输入 n 个整数 F(1)   F(2)   ...   F(n) 第三行输入 n