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