昨天搜狐笔试 我一个长期开发java的就招鄙视了 咦尽是C/C++的相关内容 好久都没写C/C++代码的 而且还要在纸上写!
第一道简答题似乎大概是这样的 N个人 从1编号到N围成一圈 有一M整数 从编号1的开始在这群人数 数到M 就去除这个人 从下个人开始继续数到M 再去除那个人 数到这群人只剩一个 输出这个人的编号!
今天心情不好 就试着在IDE上实现这个题的代码,有了IDE一切又那么熟悉了!呵呵 晒晒自己的代码!写的不好!不要见怪呵!
#include <iostream>
using namespace std;
int get_last_one(int n,int m);
int remove_by_key(int n[],int length,int m,int start);
int main()
{
int n = 8;
int m = 3;
int key = get_last_one(n,m);
cout << key;
return 0;
}
int get_last_one(int n, int m)
{
int numbers [n];
for(int i = 0 ; i < n ; i++)
{
numbers[i] = i + 1;
}
int length = n;
int start = 0;
while(length > 1)
{
start = remove_by_key(numbers,length,m,start);
length --;//去除一个人就少一个人!
}
return numbers[0];
}
int remove_by_key(int n[], int length, int m,int start)
{
start = (start + m - 1) % length;
if(start == length - 1)//最后一个直接返回0
{
return 0;
}
for(int i = start ; i < (length-1) ; i ++)//把后面的人都前移!
{
n[i] = n[i + 1];
}
return start;//返回下次数数的起点!
}