`
小羊fc
  • 浏览: 88797 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

搜狐笔试的一道题

    博客分类:
  • C++
 
阅读更多

      昨天搜狐笔试 我一个长期开发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;//返回下次数数的起点!
}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics