面试题1

来源:互联网 发布:php http上传文件 编辑:程序博客网 时间:2024/06/06 16:48

题目: n从1开始,每个操作可以选择对n加1或者对n加倍。若想获得整数2013,最少需要多少个操作。

选项:A:18   B:24    C:21    D:不可能


c
#include <stdio.h>  #include <stdlib.h>    #define FINAL 2013    #define MAX 25    typedef struct num {      int d, time;  } num;      typedef struct queue {      int front, rear, count;      num data[10000000];  } queue;      void enQueue(queue *q, num d)  {      q->data[q->rear ++] = d;      q->count ++;  }    num deQueue(queue *q)  {      num res;      res = q->data[q->front ++];      q->count --;        return res;  }      int main(void)  {      int flag = 0;        num bt, one, two, s;        bt.d = 2;      bt.time = 1;        queue *q = (queue *)malloc(sizeof(queue));      q->front = q->rear = q->count = 0;        enQueue(q, bt);        while (q->count > 0) {          s = deQueue(q);            if (s.d == FINAL) {              flag = 1;              printf("%d\n", s.time);              break;          }            one.d = s.d + 1;          one.time = s.time + 1;          if (one.d <= FINAL && one.time <= MAX) {              enQueue(q, one);          }            two.d = s.d * 2;          two.time = s.time + 1;          if (two.d <= FINAL && two.time <= MAX) {              enQueue(q, two);          }            printf("%d,%d,%d\n", q->count,q->data[q->rear-1].d,q->data[q->rear-1].time);      }        if (flag == 0)          printf("不可能!\n");        return 0;  }  

输出:

2,4,2
3,6,3
4,8,3
5,8,4
6,12,4
7,10,4
8,16,4
9,10,5
10,16,5
11,14,5
12,24,5
13,12,5
14,20,5
15,18,5
16,32,5
17,12,6
18,20,6
19,18,6
20,32,6
21,16,6
22,28,6
23,26,6
24,48,6
25,14,6
26,24,6
27,22,6
28,40,6
29,20,6
30,36,6
31,34,6
32,64,6

.............

结果:18


0 0
原创粉丝点击