代码改变世界

腾讯面试题:根据上排给出十个数,在其下排填出对应的十个数,要求下排每个数都是先前上排那十个数在下排出现的次数

2014-03-17 22:33  带雪梅初暖  阅读(1266)  评论(0)    收藏  举报

思路:

1、先初始化下排数组,使其值都为0。

2、初始化success状态为1,对上排数组进行遍历,获取每个值在下排数组出现的次数。

3、判断出现次数count,如果与下排数组对应值不相等,将count赋值给下排数组,并将success改为0。

4、判断success的值,为1退出整个循环,为0重复步骤2直至success的值为1。

用C写了下:

#define LEN 10
int arr[LEN] = {0,1,2,3,4,5,6,7,8,9};
int result[LEN] = {};
int getReulst();
int getFrequecy(int num);

int main(){
  int k,i,success = 0;
  while(success == 0){
    success = getReulst();
  }
  for(i = 0; i < LEN; i++){
    printf("%d,",result[i]);
  }
  scanf("%d", &k);
}

 

int getReulst(){
  int i,num,frequecy;
  int success = 1;
  for(i = 0; i < LEN; i++){
    num = arr[i];
    frequecy = getFrequecy(num);
    if(result[i] != frequecy){
      result[i] = frequecy;
      success = 0;
    }
  }
  return success;
}

int getFrequecy(int num){
  int i;
  int count = 0;
  for(i = 0; i < LEN; i++){
    if(result[i] == num){
      count++;
    }
  }
  return count;
}