50名运动员单数出列

文章目录

  • 前言
  • 一、面试题目:
  • 二、代码
  • 总结


前言

昨天做了一道面试题,当时对那道题目是很懵的, 当来面试后去了百度查找一下答案,最后才恍然大悟,当然,答案里面说这道题都不用想就能说出答案。最后发现还真是那么个回事。最后还是写写代码记录一下复杂的滋味。

一、面试题目:

有50名运动员按顺序排成一排,教练下令:“单数运动员出列!”剩下的运动员重新排序编号,教练又下令:“单数运动员出列!”如此下去,最后剩下一个人,他是几号运动员?

二、代码

#include #define  PEOPLENUM   50int findLastNum(int * a, int length);	//找出最后一名队员的
int showArr(int * a, int length);		//显示数字元素int main()
{int i, arr[PEOPLENUM];for(i=0; i<sizeof(arr)/sizeof(int); ++i){arr[i] = i+1;}showArr(arr, sizeof(arr)/sizeof(int));int res = findLastNum(arr, sizeof(arr)/sizeof(int));printf("结果为:%d\n", res);return 0;
}int showArr(int * a, int length)
{int i;for(i=0; i<length; ++i){printf("%d ", a[i]);}printf("\n");
}int findLastNum(int * a, int length)
{int i = 0, len;if(1 == length)return a[0];else{len = length/2;int arr[len];for(i=0; i<len; ++i){arr[i] = a[2*i+1];}findLastNum(arr, len);}
}

运行结果:
在这里插入图片描述

总结

简单来说这里主要是考查1-50中2的n次方最大的数字。但是更重要的是递归的思想,例如最后一个人排在第1位,那么他前一次肯定排在第2位,那么他前前一次肯定排在第4位·······


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部