免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 9473 | 回复: 24
打印 上一主题 下一主题

[算法] 【分享】今日电话面试题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-10 21:46 |只看该作者 |倒序浏览
写一个函数,输出前N个数(从7开始),这N个数满足如下3个条件中的任意一个
1.整除7
2.各位上的数字之和整除7,(比如34)
3.任意位上包含数字7


  1. void printN(int n)
  2. {

  3.        
  4.         int c=0;
  5.         int i=7;
  6.         do
  7.         {
  8.                 if(i%7 ==0)
  9.                 {
  10.                         printf("%d\n",i);
  11.                         c++;
  12.                 }
  13.                 else
  14.                 {
  15.                         int j=i%10;
  16.                         int k=j;
  17.                         int s=k;
  18.                         int p=10;
  19.                         while(k<i)
  20.                         {

  21.                                 if(j==7)
  22.                                 {
  23.                                         printf("%d\n",i);
  24.                                         s=0;
  25.                                         c++;
  26.                                         break;

  27.                                 }
  28.                                 else
  29.                                 {
  30.                                         j=((i-k)/p)%10;
  31.                                         s+=j;
  32.                                         k=j*p+k;
  33.                                         p*=10;


  34.                                 }
  35.                         }
  36.                         if(s&&s%7==0)
  37.                         {


  38.                                 printf("%d\n",i);
  39.                                 c++;
  40.                         }
  41.                        

  42.                 }
  43.                 i++;
  44.         } while (c<n);
  45. }
复制代码

[ 本帖最后由 yovn 于 2008-12-12 09:33 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-12-10 22:11 |只看该作者
i++,这个效率有点低,你应该在每次查找下一个数时充分利用前面的信息,能够提高效率

另外,好奇地问问,电话面试怎么考算法,能说清楚么

论坛徽章:
0
3 [报告]
发表于 2008-12-10 22:19 |只看该作者

回复 #2 tyc611 的帖子

没想到能利用的信息,电话里面,我说对方写,最后确认,就这样

论坛徽章:
1
天秤座
日期:2014-04-27 07:42:20
4 [报告]
发表于 2008-12-10 22:32 |只看该作者
7,70,77。。。。
这个数只能是7的1倍、11倍、111倍。。。和以上倍数的10倍、100倍、1000倍。。。。。

论坛徽章:
0
5 [报告]
发表于 2008-12-10 22:34 |只看该作者
什么工作?考这样的算法。。

论坛徽章:
0
6 [报告]
发表于 2008-12-10 22:45 |只看该作者
原帖由 A.com 于 2008-12-10 22:32 发表
7,70,77。。。。
这个数只能是7的1倍、11倍、111倍。。。和以上倍数的10倍、100倍、1000倍。。。。。

lz题目中只需要满足三个条件之一即可

论坛徽章:
1
天秤座
日期:2014-04-27 07:42:20
7 [报告]
发表于 2008-12-10 23:06 |只看该作者
寒,看错了,还以为要同时满足3个条件。这样的话,分3个逻辑效率要高很多,第一个是7的倍数,第二个是数加起来和是7,显然,70000……61、610……等,第三个是任意含7的数,都能直接根据条件生成而无需用条件判断的。

[ 本帖最后由 A.com 于 2008-12-10 23:12 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-12-10 23:20 |只看该作者
思路很明确,不过真正能写出来,并不是那么简单。
楼主厉害!

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
9 [报告]
发表于 2008-12-10 23:55 |只看该作者
分解成三个小函数

[ 本帖最后由 egmkang 于 2008-12-10 23:57 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2008-12-11 00:31 |只看该作者
这种东西电话面试说起来多麻烦~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP