最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏(C#解法)

原题

一开始楼主傻BB直接求解,思路惨不忍睹,各种循环啊有木有?还写了个计算是否整除扩展方法以为重复复用很了不起啊(其实是傻...)

二逼青年的代码

1   #region so1
 2             int[] count = new int[100];
 3             string[] s4 = new string[] { "Fizz", "Buzz", "Whizz" };
 4             for (int i = 0; i < count.Length; i++)
 5             {
 6                 count[i] = i + 1;
 7                 if (count[i].compa(s2[0]))
 8                 {
 9                     result[i] = s4[0];
10                     if (count[i].compa(s2[1]))
11                     { result[i] = s4[0] + s4[1]; }
12                 }
13                 else
14                 {
15                     if (count[i].compa(s2[2]))
16                     {
17                         result[i] = s4[2];
18                         if (count[i].compa(s2[1]))
19                         {
20                             result[i] = s4[1] + s4[2];
21                             if (count[i].compa(s2[0]))
22                             { result[i] = s4[0] + s4[1] + s4[2]; }
23                         }
24                         else
25                         {
26                             if (count[i].compa(s2[0]))
27                             { result[i] = s4[0] + s4[1]; }
28                         }
29                     }
30                     else
31                     { result[i] = (i + 1).ToString(); }
32                 }
33             }
34             for (int i = 0; i < 10; i++)
35             { result[s2[0] + i * 10 - 1] = s4[0]; result[i + s2[0] * 10 - 1] = s4[0]; }
36             foreach (var item in result)
37             { Console.WriteLine(item); }
38             #endregion

后来楼主想了一下,感觉判断是否整除可以复用,然后一般的值先赋过去,虽然这样会重复,但是由于集合是越来越小的所以不会出差错,而在a,b,c集合外的值作为另外一个判断,赋普通的值给他,这样代码就如下了:

普通青年的代码

#region so02
            int sh = 1;
            for (int i = 0; i < 10; i++)
            {
                int i2 = 0;
                for (i2 = 0; i2 < 10; i2++)
                {
                    bool b1 = sh.compa(s2[0]);
                    bool b2 = sh.compa(s2[1]);
                    bool b3 = sh.compa(s2[2]);
                    if (b1) { result[i * 10 + i2] = "Fizz"; }
                    if (b2) { result[i * 10 + i2] = "Buzz"; }
                    if (b3) { result[i * 10 + i2] = "Whizz"; }
                    if (b1 && b2) { result[i * 10 + i2] = "FizzBuzz"; }
                    if (b1 && b3) { result[i * 10 + i2] = "FizzWhizz"; }
                    if (b2 && b3) { result[i * 10 + i2] = "BuzzWhizz"; }
                    if (b1 && b2 && b3) { result[i * 10 + i2] = "FizzBuzzWhizz"; }
                    if (i2 == s2[0]) { result[i * 10 + i2] = "Fizz"; }
                    if (!(b1 || b2 || b3))
                    { result[i * 10 + i2] = sh.ToString(); }
                    sh++;
                }
                if (i == s2[0])
                {
                    for (int i3 = 0; i3 < 10; i3++)
                    { result[i * 10 + i3 - 1] = "Fizz"; }
                }
            }
            #endregion

(是否有误未测试,但大体是这个思路) .

后来楼主再回去看那个页面,人家说10行代码就能搞定,楼主看着这普通青年的代码表示蛋疼,于是请教一下在中大的基友.人家读数学专业的就是不一样,给的思路也是天马行空,于是借鉴一下传说中的至简代码就出来了.

文艺青年的代码

1             Console.WriteLine("说出三个不同的特殊数,用‘,‘隔开 ");
2             string[] s1 = Console.ReadLine().Split(‘,‘);
3             int[] s2 = new int[] { int.Parse(s1[0]), int.Parse(s1[1]), int.Parse(s1[2]) };
4             string[] result = new string[100];
5             for (int i = 1; i < 101; i++) { result[i - 1] = (i % s2[0] == 0 ? "Fizz" : "") + (i % s2[1] == 0 ? "Buzz" : "") + (i % s2[2] == 0 ? "Whizz" : "") + ((i % s2[0] != 0 && i % s2[1] != 0 && i % s2[2] != 0) ? i.ToString() : ""); }
6             for (int i3 = 0; i3 < 10; i3++) { result[s2[0] * 10 + i3 - 1] = result[i3 * 10 + s2[0] - 1] = "Fizz"; }
7             foreach (var item in result) { Console.WriteLine(item); }
8             Console.ReadKey();

思路就是规则3和4通过活用三元运算符+字符串同时拼接处理.第一个for循环为规则3和4赋值,如果满足整除条件,输出对应单词,这样能被N(1到3)整除的数字对应的单词都能赋到,但是有一种情况就是整除条件都不满足,也就是说是一个普通的数字,而前面根据三元运算符得到的答案都是“”,所已最后的条件满足的话输出普通的数字。

然后是规则5。规则5是最重要的,所已在最后才为其赋值。这个没什么好说的,想一想都知道规则5每种条件都包含10个数,所已在0到10之间循环,同时为个数满足以及十位数满足的数赋值就行了.代码控制在10行代码啊有木有(我不知道10行的定义是什么这样稍微有点勉强不过最少也有8行吧,哈哈 )?

当然是假定用户不捣乱,一开始不输入错的情况。加个验证?那你们就慢慢验吧。

下部就不截了。

最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏(C#解法),布布扣,bubuko.com

时间: 2024-08-06 00:59:01

最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏(C#解法)的相关文章

ThoughtWorks代码挑战——FizzBuzzWhizz游戏 通用高速版(C/C++ &amp; C#)

最早看到这个题目是从@ 程序媛想事儿(Alexia) 的 最难面试的IT公司之ThoughtWorks代码挑战--FizzBuzzWhizz游戏 开始的,然后这几天陆陆续续有N个小伙伴发表了自己的文章和代码,本来不想做些什么,但是看了这么多代码,总有点想写(射)点什么的欲望(你玩英雄联盟吗?玩的话,应该知道我说的是什么). 我说说我对这个题目的看法,当初看Alexia的文章时,也没有看得很仔细,甚至没有看这个题目的原出处,一边在玩英雄联盟,一边看了一下题目,Alexia并没有贴出相应的代码要求(

如何阅读公司的项目代码

看到ITFriend中有些小伙伴刚进入公司,面对大量的项目代码,往往手足无措,有点慌,我说下我的经历. 声明:我从事的是C++开发工作,阅读的代码都是基于客户端/服务器的,以下谈的是C++项目代码的阅读方法多些 希望懂java的小伙伴分享下java公司项目代码的阅读方法,小弟感激不尽. 编译代码把项目跑起来  代码到手以后,先尝试着编译一下,无非就是库的配置,库路径的配置,缺少某个文件,或者头文件包含路径不正确,一般公司给你的代码都可以编译成功,windows平台下一般使用vs工具来编译,集成调

怎样阅读公司的项目代码

看到ITFriend中有些小伙伴刚进入公司,面对大量的项目代码,往往手足无措,有点慌,我说下我的经历. 声明:我从事的是C++开发工作.阅读的代码都是基于client/server的,下面谈的是C++项目代码的阅读方法多些 希望懂java的小伙伴分享下java公司项目代码的阅读方法.小弟感激不尽. 编译代码把项目跑起来  代码到手以后.先尝试着编译一下,无非就是库的配置.库路径的配置,缺少某个文件,或者头文件包括路径不对,一般公司给你的代码都能够编译成功,windows平台下一般使用vs工具来编

程序员面试京东前端,现场JavaScript代码写出魔方特效

程序员面试京东前端,现场JS代码写出魔方特效,成功搞定20K月薪 今天小编我逛论坛,看到了一位程序员小伙子,因为是有了两年工作经验,然后去京东面试前端岗,一面二面轻松就过了,到了技术面这一块,小伙干脆就直接用JavaScript写了一个魔方特效,最终通过了面试,试用期12K,转正20K的工资水平,这特效看的小编也服气,主要是脑洞大,所以我也COPY了一份源码,分享给头条上的小伙伴学习. 完成之后的效果图如图所示: 完整源码分享给大家: 想要更多项目源码拿来练练手的可以复制下方群号→ web前端/

中美贸易战,软件测试工程师怎么样面试上好的公司

首先买个关子,如果你是面试官,你希望招一个什么样的人进来? 如果这个问题搞明白了,那么可以说测试岗位的面试,就变得非常轻松了. 按照一般的惯例,面试官都会让你自我介绍,介绍你的项目经验,询问你的技术能力,这些都是常规的问题. 在这篇文章里,我不去说什么固定的范本什么的,我就以我以前面试别人的情景为例,具体说一下面试官的狡猾之处,他们会在什么地方给你设坑,你又该如何应对一个棘手的提问等等. 在这里我不罗列条条框框,我只给您们呈现一个真正的面试官,呈现一个真正的面试过程. 一,上来必然是自我介绍.

金三银四,我面试七家公司拿到四个offer,面试历程和感悟分享

人人都说金三银四,由于一些个人的原因,博主也在今年的四月份抽空面了几家公司,这里来总结下学习到的东西. 先简单的说下博主的情况: 2015年7月份毕业,到现在加上实习可以算三年工作经验 base武汉,相比于北上广深,工作机会少了点 目前就职于驾考/汽车行业的互联网公司 大概就这么多,给出自身的情况是想给大家一个参考.由于并没有敢裸辞,所以边上班边去面试.今年找工作给我的感受是:市场貌似已经饱和,自己投递的很多简历都没了下文,面试很多走的内推,也没了之前很多的猎头电话,一个字形容就是 "惨&quo

第一次面试经历-某公司后端研发

笔试 笔试部分是做了10道题目, 主要是类似于LeetCode上的题. 也包含了一些设计题目, 比如说怎么设计一个爬虫系统的去重. 在面试的时候答题纸也被送过来, 面试官会选择里面一个问题(主要是没做出来的)来问你. 题目我会记录下来放到GitHub上. 一面 一面聊的时间很长, 总共70分钟左右. 总共问了三个大题吧. 发现在面试的过程中, 有一些问题是一开始没有思考到的, 在交流想法的时候发现漏掉了. 可能是没有一开始去设计测试用例, 或者去思考当前的可能的场景或者情况. 60分钟 限制用户

游戏公司CTO带你做万能游戏框架【进阶就业班】

课程大纲 第一章 万能框架设计模式 设计模式  工厂模式 设计模式  策略模式 设计模式  观察者模式 设计模式  单例模式 互动答疑 第二章 设计模式  代理模式 设计模式  门面模式 设计模式  建造者模式 设计模式  组合模式 对模式用法总结 互动答疑 第三章 万能框架之框架实现 框架原理讲解 框架实现  消息类 实现 框架实现之 事件系统,数据结构 消息链表实现 框架实现   各个模块manager 互动答疑 第四章 框架实现  个模块基础类 框架实现  使用注意事项 互动答疑 第五章

如何快速熟悉公司的旧代码

---恢复内容开始--- 记录控制器对应的类 ppt   找应用程序的根控制器 AppDelegate 文件 int main