原题

看到那么多人看到前面这么糟粕的代码各种不忍直视后,楼主还是把最终实现放在页首吧.

            Console.WriteLine("说出三个不同的特殊数,用','隔开 ");            string[] s1 = Console.ReadLine().Split(',');            for (int i = 1; i < 101; i++)            {                if (i.ToString().Contains(s1[0])) { Console.WriteLine("Fizz"); }                else { Console.WriteLine((i % int.Parse(s1[0]) == 0 ? "Fizz" : "") + (i % int.Parse(s1[1]) == 0 ? "Buzz" : "") + (i % int.Parse(s1[2]) == 0 ? "Whizz" : "") + ((i % int.Parse(s1[0]) != 0 && i % int.Parse(s1[1]) != 0 && i % int.Parse(s1[2]) != 0) ? i.ToString() : "")); }            }            Console.ReadKey();

其实我想表达的意思是学习更多的是循序渐进而不是天才般的灵光乍现,不过不知谁懂呢.

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

二逼青年的代码

 1   #region so1
 2             int[] count = new int[];
 3             string[] s4 = new string[] { "Fizz", "Buzz", "Whizz" };
 4             for (int i = ; i < count.Length; i++)
 5             {
 6                 count[i] = i + ;
 7                 if (count[i].compa(s2[]))
 8                 {
 9                     result[i] = s4[];
                     if (count[i].compa(s2[]))
                     { result[i] = s4[] + s4[]; }
                 }
                 else
                 {
                     if (count[i].compa(s2[]))
                     {
                         result[i] = s4[];
                         if (count[i].compa(s2[]))
                         {
                             result[i] = s4[] + s4[];
                             if (count[i].compa(s2[]))
                             { result[i] = s4[] + s4[] + s4[]; }
                         }
                         else
                         {
                             if (count[i].compa(s2[]))
                             { result[i] = s4[] + s4[]; }
                         }
                     }
                     else
                     { result[i] = (i + ).ToString(); }
                 }
             }
             for (int i = ; i < ; i++)
             { result[s2[] + i *  - ] = s4[]; result[i + s2[] *  - ] = s4[]; }
             foreach (var item in result)
             { Console.WriteLine(item); }
             #endregion

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

普通青年的代码

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

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

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

文艺青年的代码

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

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

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

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

下部就不截了。

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

  1. 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏

    最近互联网招聘平台拉勾网在五一期间推出个“最难面试的IT公司”代码挑战活动,评选出了5个最难面试的IT公司,即:ThoughtWorks.Google.Unisys.Rackspace.Cypress ...

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

    最早看到这个题目是从@ 程序媛想事儿(Alexia) 的 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏 开始的,然后这几天陆陆续续有N个小伙伴发表了自己的文章 ...

  3. 最艰难的采访IT公司ThoughtWorks代码挑战——FizzBuzzWhizz游戏

    最近的互联网招聘平台拉勾网在五月推出了"最艰难的采访IT公司"码挑战活动,评选出了5个最难面试的IT公司,即:ThoughtWorks.Google.Unisys.Rackspac ...

  4. ThoughtWorks代码挑战——FizzBuzzWhizz

    很久没发表过文章了,今天看到一篇文章 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏(C#解法) 看到LZ的2B青年代码,实在是惨不忍睹,故写篇文章来探讨下这类 ...

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

    程序员面试京东前端,现场JS代码写出魔方特效,成功搞定20K月薪 今天小编我逛论坛,看到了一位程序员小伙子,因为是有了两年工作经验,然后去京东面试前端岗,一面二面轻松就过了,到了技术面这一块,小伙干脆 ...

  6. 2019前端面试系列——JS高频手写代码题

    实现 new 方法 /* * 1.创建一个空对象 * 2.链接到原型 * 3.绑定this值 * 4.返回新对象 */ // 第一种实现 function createNew() { let obj ...

  7. 公司和家里代码文件同步方案: (git和dropbox实现)

    公司和家里代码文件同步方案: (git和dropbox实现) 参与公司福利购入了有补贴的macbook pro后, 就不用上下班背着电脑了. 但是也出现了另外一问题: 家里和公司代码同步的问题 公司有 ...

  8. IT软件外包行业深入分析:现状、前途、趋势、待遇 什么是软件外包 外包公司是怎么工作的 软件外包公司的面试 软件外包公司需要什么样的人

    目录: [0] - 为什么要对大学生谈软件外包? [1] - 什么是软件外包? [2] - 软件为什么要外包? [3] - 为什么要承接软件外包 [4] - 做软件外包有前途吗? [5] - 外包公司 ...

  9. 19年7月份面试7家公司,整理的java面试题(答案自行百度解决,也是个学习的过程)

    Dubbo与注册中心Zookeeper了解多少ConcurrentHashMap的原理 集合 HashMap 和 HashTable和ConcurrentHashMap的原理以及区别HashMap初始 ...

随机推荐

  1. 【荐】如何正确理解PHP之include,include_once,require,require_once等包含作用域

    我们为大家总结的PHP include作用域的问题包括:PHP include 变量作用域和函数.类的作用域等方面的问题.希望对大家有所帮助. 很多程序员在使用PHP语言进行实际编程时,通常只会关注P ...

  2. 逻辑回归LR

    逻辑回归算法相信很多人都很熟悉,也算是我比较熟悉的算法之一了,毕业论文当时的项目就是用的这个算法.这个算法可能不想随机森林.SVM.神经网络.GBDT等分类算法那么复杂那么高深的样子,可是绝对不能小看 ...

  3. OpenCV 2.4.13 编译使用(VS2015下)

    OpenCV2.4.13编译(VS2015) 这里给出已经编译好的的下载路径.包括Win64的debug和release版本. OpenCV for MSVC14 Win64 1.下载OpenCV源码 ...

  4. spring jpa 实体互相引用返回restful数据循环引用报错的问题

    spring jpa 实体互相引用返回restful数据循环引用报错的问题 Java实体里两个对象有关联关系,互相引用,比如,在一对多的关联关系里 Problem对象,引用了标签列表ProblemLa ...

  5. JavaScript高级程序设计学习笔记--错误处理与调试

    try-catch语句 只要代码中包含finally子句,则无论try或catch语句块中包含什么代码--甚至return语句,都不会阻止finally子句的执行,来看下面这个函数: function ...

  6. 【目录】 hadoop2.6.0

    hadoop2.6.0 安装+例子运行 数据丢失问题解决 通过代码运行程序流程 利用Hadoop的 Java API 利用JAVA API 实现数据上传

  7. Java Web技术之JSP与EL表达式

    1,jsp是用来干嘛的? JSP技术是用来解决在Servlet中需要书写大量的拼接html标签.以及框架的代码 2,jsp的三种脚本元素 a.JSP的脚本声明(定义) 格式: <%! 书写Jav ...

  8. python基础之文件操作

    对于文件操作中最简单的操作就是使用print函数将文件输出到屏幕中,但是这种操作并不能是文件保存到磁盘中去,如果下调用该数据还的重新输入等. 而在python中提供了必要的函数和方法进行默认情况下的文 ...

  9. 如何从零基础学习VR

    转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...

  10. <input />文字方框中,字体颜色的变化 要求默认的字体颜色是灰色,当要输入字时,字体是正常的黑色

    <input type="text" name="address" size="60" maxlength="60" ...