免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: robin254817
打印 上一主题 下一主题

[C] 一道面试题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-02-24 09:09 |只看该作者
见<<具体数学>> 1.3
有详细的数学分析

论坛徽章:
0
12 [报告]
发表于 2011-02-24 09:10 |只看该作者
这种帖子在C版已经说了好几次了吧,用数学逆推

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
13 [报告]
发表于 2011-02-24 11:05 |只看该作者
本帖最后由 w_anthony 于 2011-02-24 11:13 编辑

发一个看似笨拙,但实际上进行较大数计算很有效的方法,n = 1000时,结果是603。

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main(int argc, char** argv)
  4. {
  5.         const int n = 1000;
  6.         for (int i = 0; i < n; i++)
  7.         {
  8.                 int l = i, s = n, c = 2;
  9.                 while ((l % 3 != c) && (s > 1))
  10.                 {
  11.                         const int a = 2 - c;
  12.                         l -= (l + a) / 3;
  13.                         c = 2 - (s + a) % 3;
  14.                         s -= (s + a) / 3;
  15.                 }
  16.                 if (s <= 1)
  17.                 {
  18.                         printf("result = %d\r\n", i);
  19.                         break;
  20.                 }
  21.         }
  22.         return 0;
  23. }
复制代码
测试了下,当n=1000000000时,计算经过了2-3分钟,结果是672612259。这种较大数计算,如果是链表的方法,是算不出结果的。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
14 [报告]
发表于 2011-02-24 11:19 |只看该作者
见 1.3
有详细的数学分析
yikaikai 发表于 2011-02-24 09:09


这些知识对一般程序员有什么用?修养?

论坛徽章:
0
15 [报告]
发表于 2011-02-24 14:25 |只看该作者
回复 13# w_anthony


    我用笨法单向循环链表,求得左后删除的是705.链表最后剩余225和603.

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
16 [报告]
发表于 2011-02-24 22:34 |只看该作者
回复  w_anthony


    我用笨法单向循环链表,求得左后删除的是705.链表最后剩余225和603.
robin254817 发表于 2011-02-24 14:25



705删掉以后,还剩两个,要继续删,最后删的是225。不过我那方法完全不知道删的过程……

论坛徽章:
0
17 [报告]
发表于 2011-03-16 03:23 |只看该作者
楼主不是和我面试的一家公司吧,我用的循环单链表
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP