IT公司筆試常考的演算法題

才智咖 人氣:2.74W

部分IT公司筆試演算法題

  1、將一整數逆序後放入一陣列中(要求遞迴實現)

  void convert(int *result, int n) {

  if(n>=10)

  convert(result+1, n/10);

  *result = n%10;

  }

  int main(int argc, char* argv[]) {

  int n = 123456789, result[20]={};

  convert(result, n);

  printf("%d:", n);

  for(int i=0; i<9; i++)

  printf("%d", result);

  }

  2、求高於平均分的學生學號及成績(學號和成績人工輸入)

  double find(int total, int n) {

  int number, score, average;

  scanf("%d", number);

  if(number != 0) {

  scanf("%d", score);

  average = find(total+score, n+1);

  if(score >= average)

  printf("%d:%dn", number, score);

  return average;

  } else {

  printf("Average=%dn", total/n);

  return total/n;

  }

  }

  int main(int argc, char* argv[]) {

  find(0, 0);

  }

  3、遞迴實現迴文判斷(如:abcdedbca就是迴文,判斷一個面試者對遞迴理解的簡單程式)

  int find(char *str, int n) {

  if(n<=1) return 1;

  else if(str[0]==str[n-1]) return find(str+1, n-2);

  else return 0;

  }

  int main(int argc, char* argv[]) {

  char *str = "abcdedcba";

  printf("%s: %sn", str, find(str, strlen(str)) ? "Yes" : "No");

  }

  4、組合問題(從M個不同字元中任取N個字元的所有組合)

  void find(char *source, char *result, int n) {

  if(n==1) {

  while(*source)

  printf("%s%cn", result, *source++);

  } else {

  int i, j;

  for(i=0; source != 0; i++);

  for(j=0; result[j] != 0; j++);

  for(; i>=n; i--) {

  result[j] = *source++;

  result[j+1] = '