面试题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
- [面试题] 随机数相关面试题(1)
- java面试题1
- JAVA面试题-1
- 华为面试题1
- C#面试题 1
- 英文面试题(1)
- 面试题1-- Intel
- C++面试题1
- 面试题(1)
- c# 面试题1
- 中兴面试题1
- .net面试题1
- 面试题1
- 面试题1
- .NET 面试题1
- java面试题1
- sql面试题(1)
- 面试题1
- VB.NET之旅—文本框内字符串的检验(机房收费系统重构个人版)
- 在主函数中输入10个等长的字符串。用另一个函数对它们排序,然后主函数输出10个已经排好的字符串。
- 法规和电话费个回复过还采访过
- ZOJ-1192
- 风格的风格更好地付给
- 面试题1
- 发个梵蒂冈的消费郭德纲沪电股份
- 分享基于EF+WCF的通用三层架构及解析
- 峰值信噪比PSNR之浮点精度问题
- UVA 10458 - Cricket Ranking(容斥原理)
- java Socket 使用多线程实现一对多的通信
- STM32F103VC在RAM中调试方法
- .NET技术+25台服务器怎样支撑世界第54大网站
- Linux进程上下文切换(process context switch)