一道淘汰85%面试者的百度开发者面试题(转)

JimC 2014-04-23 08:01:35
依序遍历0到100闭区间内所有的正整数,如果该数字能被3整除,则输出该数字及‘*’标记;如果该数字能被5整除,则输出该数字及‘#’标记;如果该数字既能被3整除又能被5整除,则输出该数字及‘*#’标记。
这个代码是什么意思?求大神解释!!!

#include<iostream>
#include<string>

using namespace std;

int main()
{
int add[7] = {3,2,1,3,1,2,3};
char c[6] = {'*','#','*','*','#','*'};
string all = "*#";
int i = 0;
int index = 0;
while((i += add[index]) <= 100)
{
if(index != 6)
{
cout << i << c[index] << endl;
index++;
}
else
{
cout << i << all << endl;
index = 0;
}
}
return 0;
}
...全文
1232 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiyougang 2014-04-27
  • 打赏
  • 举报
回复
也是没看懂。。。。。。看来连去也不能去了
lm_whales 2014-04-27
  • 打赏
  • 举报
回复
引用 42 楼 TBWood 的回复:
唉,站在和谐讨论,为楼主解决问题的角度上去回答问题,都是好样的,无关于对错。 证明自己对,不一定要踩在别人的头上,不一定要通过否定别人来肯定自己。 已经遇到好几个这样的人了,见贤则学,不贤而省己。
++ 其实各种方法都不错,查表法也不错,无论动态生成,还是编写程序生成,还是直接手工计算。 另外,有些查表算法之所以难懂,因为程序只给出那个表,没给出表的生成算法。 如果是做工程,对于某些,固定数据,但是手工计算比较复杂的,或者并且还有可能会调整; 可以先编写一个程序,直接生成一部分代码,比如生成一个表。
gz_qmc 2014-04-25
  • 打赏
  • 举报
回复
玩笑归玩笑 百度以搜索为核心 在效率上高要求是理所当然的
赵4老师 2014-04-25
  • 打赏
  • 举报
回复
言过其实了!
walkonthesky 2014-04-25
  • 打赏
  • 举报
回复
引用 32 楼 gz_qmc 的回复:
玩笑归玩笑 百度以搜索为核心 在效率上高要求是理所当然的
查表的效率和可读性都非常优秀
zhangjie121 2014-04-25
  • 打赏
  • 举报
回复
你们好搞笑,讨论个技术也能变成骂战!
tbwork 2014-04-25
  • 打赏
  • 举报
回复
唉,站在和谐讨论,为楼主解决问题的角度上去回答问题,都是好样的,无关于对错。 证明自己对,不一定要踩在别人的头上,不一定要通过否定别人来肯定自己。 已经遇到好几个这样的人了,见贤则学,不贤而省己。
crazybullet 2014-04-25
  • 打赏
  • 举报
回复
引用 26 楼 jackzhhuang 的回复:
你们真天才,这道题目原题叫fizzbuzz,被3整除的数用fizz替代,被5整除的数用buzz替代,同时3和5都可以整除则用fizzbuzz替代。题目原本是考察设计模式的,和算法几乎没关系,主要考察点有二: 1、如果改变3和5整除的条件怎么办? 2、如果改变输出平台怎么办?
能不能给出你这个角度的代码,期待ing。。。
JimC 2014-04-25
  • 打赏
  • 举报
回复
感谢大家的回复!
JimC 2014-04-25
  • 打赏
  • 举报
回复
我也是在论坛上看到这个标题才知道的题目,因为没看懂别人给的代码,所以想让大神们解释一下。没有任何忽悠的意思
super_admi 2014-04-25
  • 打赏
  • 举报
回复
就算是吃饭睡觉拉屎,也会变成骂战。正所谓,有人的地方就有江湖,不外如是。
引用 33 楼 zhangjie121 的回复:
你们好搞笑,讨论个技术也能变成骂战!
点不亮的黑色 2014-04-25
  • 打赏
  • 举报
回复
引用 33 楼 zhangjie121 的回复:
你们好搞笑,讨论个技术也能变成骂战!
确实。来这都是为了看技术的,不是看口水的。
乐百川 2014-04-24
  • 打赏
  • 举报
回复
引用 30 楼 super_admi 的回复:
这说明这一种的可读性是最好的。但显然效率比楼主提供的要低。楼主的代码至少省去了取余的运算。 所谓查表,就是先把[0,100]中的正整数和某一个表对应起来,然后在使用的时候,不用计算,直接从表里取。 传说,一般情况下,查表是最快的办法。 [quote=引用 28 楼 u011054333 的回复:] [quote=引用 27 楼 gz_qmc 的回复:] for(int i=0;i<=100;i++) { if(i%3==0) printf("*"); if(i%5==0) printf("#"); printf("%d",i); } 我就这样搞了,怎么的? 来,淘汰我,B样,就你那点工资,老子还不稀罕干呢!
说老实话我就看懂了这一种,换我写我也就会写着一种……楼上面说的查表什么的我完全看不懂啊[/quote][/quote] 唔,我现在学的自认为还差不多,但是一上论坛上面一看发现自己就像小学生一样啥也不会
mujiok2003 2014-04-24
  • 打赏
  • 举报
回复
引用 15 楼 walkonthesky 的回复:
[quote=引用 14 楼 mujiok2003 的回复:] [quote=引用 1 楼 caozhy 的回复:] 说白了,这代码就是找到了它们间隔的规律 0*# 1 2 3* 4 5# 6* 7 8 9* 10# 11 12* 13 14 15*# 16 17 18* 19 20# 21 ... 你可以看出,每15(3和5的最小公倍数)个数字,打印符号就间隔一轮。 我们从3开始看,输出符号分别是3的*,5的#,然后是* * # * ...也就是c[6] 从间隔来看,3到5间隔2,2到6间隔1,之后是3 1 2 3... 所以,我们只要安排好这个顺序和输出的字符,就可以不用每次判断了。
++[/quote] 这类题目考较的是代码的可读性。单纯 效率,查表不是更快?[/quote] 最好查表。
super_admi 2014-04-24
  • 打赏
  • 举报
回复
这说明这一种的可读性是最好的。但显然效率比楼主提供的要低。楼主的代码至少省去了取余的运算。 所谓查表,就是先把[0,100]中的正整数和某一个表对应起来,然后在使用的时候,不用计算,直接从表里取。 传说,一般情况下,查表是最快的办法。
引用 28 楼 u011054333 的回复:
[quote=引用 27 楼 gz_qmc 的回复:] for(int i=0;i<=100;i++) { if(i%3==0) printf("*"); if(i%5==0) printf("#"); printf("%d",i); } 我就这样搞了,怎么的? 来,淘汰我,B样,就你那点工资,老子还不稀罕干呢!
说老实话我就看懂了这一种,换我写我也就会写着一种……楼上面说的查表什么的我完全看不懂啊[/quote]
walkonthesky 2014-04-24
  • 打赏
  • 举报
回复
引用 14 楼 mujiok2003 的回复:
[quote=引用 1 楼 caozhy 的回复:] 说白了,这代码就是找到了它们间隔的规律 0*# 1 2 3* 4 5# 6* 7 8 9* 10# 11 12* 13 14 15*# 16 17 18* 19 20# 21 ... 你可以看出,每15(3和5的最小公倍数)个数字,打印符号就间隔一轮。 我们从3开始看,输出符号分别是3的*,5的#,然后是* * # * ...也就是c[6] 从间隔来看,3到5间隔2,2到6间隔1,之后是3 1 2 3... 所以,我们只要安排好这个顺序和输出的字符,就可以不用每次判断了。
++[/quote] 这类题目考较的是代码的可读性。单纯 效率,查表不是更快?
风雨常乐 2014-04-24
  • 打赏
  • 举报
回复
我有点怀疑标题的真假
mujiok2003 2014-04-24
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
说白了,这代码就是找到了它们间隔的规律 0*# 1 2 3* 4 5# 6* 7 8 9* 10# 11 12* 13 14 15*# 16 17 18* 19 20# 21 ... 你可以看出,每15(3和5的最小公倍数)个数字,打印符号就间隔一轮。 我们从3开始看,输出符号分别是3的*,5的#,然后是* * # * ...也就是c[6] 从间隔来看,3到5间隔2,2到6间隔1,之后是3 1 2 3... 所以,我们只要安排好这个顺序和输出的字符,就可以不用每次判断了。
++
乐百川 2014-04-24
  • 打赏
  • 举报
回复
引用 27 楼 gz_qmc 的回复:
for(int i=0;i<=100;i++) { if(i%3==0) printf("*"); if(i%5==0) printf("#"); printf("%d",i); } 我就这样搞了,怎么的? 来,淘汰我,B样,就你那点工资,老子还不稀罕干呢!
说老实话我就看懂了这一种,换我写我也就会写着一种……楼上面说的查表什么的我完全看不懂啊
auq404 2014-04-24
  • 打赏
  • 举报
回复
这个有点意思,很少看到写代码有这么较真的啊。
加载更多回复(20)

65,209

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧