面试碰到的一道编程题,当时没有细想去做

有一个数组a[1000],要求每隔两个数删掉一个数,到末尾则又循环到开头继续进行,求最后一个被删掉的数的原始下标位置

例如,一个数组:{0, 1, 2, 3, 4, 5, 6, 7}

  • 0->1->2(第一遍,删除)->3->4->5(第一遍,删除)->6->7->
  • 0(第二遍,删除)->1->2(已删除)->3->4(第二遍,删除)->5(已删除)->6->7 …
  • 循环直到数组中最后一个元素被删除
#define ARRAY_SIZE_MAX  1000
#define DEL_ARRAY_FLAG   1
#define DEL_GAP_VALUE   2
/*  获取当前数组可用的下标值
* array: 需要操作的数组名
* idx:数组下标值,由于其值需要被改变,所以使用指针传递
*/
static void get_index(int *array, int *idx)
{   int tmp = *idx;    //继承当前数组下标的值if (++tmp >= ARRAY_SIZE_MAX) {    //下标自增,并判断是否超出范围tmp = 0;    //超出范围下标置0}while (DEL_ARRAY_FLAG == array[tmp]) { //循环判断该下标数据是否已经被删除if (++tmp >= ARRAY_SIZE_MAX) {  //若当前下标已被删除,下标自增,并判断是否超出范围tmp = 0;}}*idx = tmp;
}int main (void)
{int array[ARRAY_SIZE_MAX] = {0};  //定义一个需要查找最后删除下标的数组int next = -1, del = 0;    //next为数组下标,del为已删除的下标个数while (1) {int gap = 0; //间隔计数值,每删除一次下标重置一次get_index(array, &next);  //获取当前数组可用下标while (1) {if (DEL_GAP_VALUE == gap) { //间隔计算值符合要求时,删除对应的数组下标array[next] = DEL_ARRAY_FLAG;    //标记该下标数组已被删除/*printf("array[%d] del\n", next);*/if (++del >= ARRAY_SIZE_MAX) {//判断删除的下标个数是否超过数组最大个数printf("the last del num is %d\n", next);//输出最后一个被删除的下标return 0;}}if (++gap > DEL_GAP_VALUE) {   //完成一次下标删除,跳出循环,重置gapbreak;}get_index(array, &next);  //获取当前数组可用下标}}return 0;
}

【面试题】有一个数组,每隔两个数删掉一个数,到末尾又循环到开头继续进行,求最后一个被删除的数的原始下标位置相关推荐

  1. C语言:一个数组中只有两个数字是出现一次

    1 //1.一个数组中只有两个数字是出现一次, 2 //其他所有数字都出现了两次. 3 //找出这两个数字,编程实现.a 4 5 //^=单独两个数的^结果 6 //单独出现的两个数不同位的标记 7 ...

  2. 一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次,找出这两个数字

    题目:一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次. 找出这两个数字,编程实现. 参考代码: #include<stdio.h> #include <windows. ...

  3. 快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值

    我觉得写得很清晰,希望没有侵犯作者的著作权,原文地址http://blog.csdn.net/hackbuteer1/article/details/6699642 快速找出一个数组中的两个数字,让这 ...

  4. 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 编写一个函数找出这两个只出现一次的数字。

    一个数组中只有两个数字是出现一次,其他所有数字都出现了两次.编写一个函数找出这两个只出现一次的数字. 1.代码编写 2.结果 1.代码编写 代码如下(示例): #define _CRT_SECURE_ ...

  5. C#把某个数组的一部分复制到另一个数组中的两种方法:Buffer.BlockCopy和Array.Copy...

    static void Main(string[] args){int[] src = new[] { 1, 2, 3, 4, 5, 6 };const int destLen = 4;//目标数组大 ...

  6. 安装matlab 2021 多出来一个 cd 驱动器盘符,删掉这个东西的办法

    问题背景 按照软件管家的教程安装了matlab 2021a 后,多出来一个CD驱动器盘符,想删掉. 解决办法 问题的产生是matlab 安装的时候运行了一个虚拟光驱的东西,你再运行一遍,卸载掉镜像就可 ...

  7. 将文件中所有数读到一个数组中_「数据结构与算法」将5个文件中的一千万年龄合并到一个新文件中...

    现在有5个文件,文件里面分别存储着1千万个用户年龄,并且每个文件中的年龄都是有序的(从小到大),现在需要将这5个文件整合到一个文件中,新文件的内容依然要保持有序(从小到大). 初始化数据 1.数据生成 ...

  8. 算法题:“找出单身狗”--找出一个数组中只出现一次的数字

    题目:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次. 编写一个函数找出这两个只出现一次的数字. 解题过程以及思路:(思路在代码中以注释形式给出) //一个数组中只有两个数字是出现一次,其 ...

  9. 剑指offer——面试题29:数组中出现次数超过一半的数字

    剑指offer--面试题29:数组中出现次数超过一半的数字 Solution1: 20180902日整理 注意几点: 1.若下一个数字和我们之前保存的数字相同,则次数 +1 2.若下一个数字和我们之前 ...

最新文章

  1. smarty变量调节器--count_words[计算词数]
  2. 旺苍电子计算机培训学校,广元旺苍技工学校
  3. python3.7.2安装-最新Centos7安装python3并与python2共存
  4. MyBatis的运行的核心原理解析(三)
  5. html弹窗页面控制大小,使用JS弹出新窗口,并设置窗口的大小和位置等相关属性,传递参数...
  6. 普中科技开发板使用说明书_百度大脑加持,米尔科技FZ3深度学习计算卡评测
  7. LeetCode 925. 长按键入(双指针)
  8. mysql怎么多重查询_mysql基于值的多重查询
  9. 谷歌大脑:探索权重无关神经网络
  10. 需求规格说明书(备注:因不支持word复制,格式图片发生改变 ,故以文件方式又上传了一份pdf)...
  11. 带你读AI论文丨LaneNet基于实体分割的端到端车道线检测
  12. 谭晓生大闹中国计算机中心,360高管谭晓生不满中国计算机大会拖堂和临时加议程,现场摔话筒发飙...
  13. Milkyway database简析
  14. 换了马甲也能认出“你” | 有了这个数据集,AI有望揪出变种勒索软件
  15. 访问 Notes/Domino 数据的定制 DXL 框架
  16. ABAP培训进入SAP第一步
  17. Visual C++课程设计选题
  18. JS基础知识点大汇总
  19. python提取文件中含某一字符串的行,并写入新的文件中
  20. ASP.NET 超市管理系统

热门文章

  1. AlertManager实现企业微信报警(十三)
  2. 流?I/O操作?阻塞?epoll?
  3. vue子组件获取祖先组件值的方法
  4. Apipost 上手指南
  5. 六步绘制漂亮思维导图简单画法
  6. 计算机经常无法打印机,为什么我电脑连接打印机老是出现这种情况~重启也不行...
  7. 苹果邮箱怎么登录qq邮箱_qq邮箱app下载安装-手机QQ邮箱2020下载v6.1.0 官方安卓版...
  8. 简单粗暴识别工作室Android识别模拟器
  9. GitHub搜索技巧整理
  10. 拍摄照片发生反转,变量初始null