最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏(C#解法)
看到那么多人看到前面这么糟粕的代码各种不忍直视后,楼主还是把最终实现放在页首吧.
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#解法)的更多相关文章
- 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏
最近互联网招聘平台拉勾网在五一期间推出个“最难面试的IT公司”代码挑战活动,评选出了5个最难面试的IT公司,即:ThoughtWorks.Google.Unisys.Rackspace.Cypress ...
- ThoughtWorks代码挑战——FizzBuzzWhizz游戏 通用高速版(C/C++ & C#)
最早看到这个题目是从@ 程序媛想事儿(Alexia) 的 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏 开始的,然后这几天陆陆续续有N个小伙伴发表了自己的文章 ...
- 最艰难的采访IT公司ThoughtWorks代码挑战——FizzBuzzWhizz游戏
最近的互联网招聘平台拉勾网在五月推出了"最艰难的采访IT公司"码挑战活动,评选出了5个最难面试的IT公司,即:ThoughtWorks.Google.Unisys.Rackspac ...
- ThoughtWorks代码挑战——FizzBuzzWhizz
很久没发表过文章了,今天看到一篇文章 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏(C#解法) 看到LZ的2B青年代码,实在是惨不忍睹,故写篇文章来探讨下这类 ...
- 程序员面试京东前端,现场JavaScript代码写出魔方特效
程序员面试京东前端,现场JS代码写出魔方特效,成功搞定20K月薪 今天小编我逛论坛,看到了一位程序员小伙子,因为是有了两年工作经验,然后去京东面试前端岗,一面二面轻松就过了,到了技术面这一块,小伙干脆 ...
- 2019前端面试系列——JS高频手写代码题
实现 new 方法 /* * 1.创建一个空对象 * 2.链接到原型 * 3.绑定this值 * 4.返回新对象 */ // 第一种实现 function createNew() { let obj ...
- 公司和家里代码文件同步方案: (git和dropbox实现)
公司和家里代码文件同步方案: (git和dropbox实现) 参与公司福利购入了有补贴的macbook pro后, 就不用上下班背着电脑了. 但是也出现了另外一问题: 家里和公司代码同步的问题 公司有 ...
- IT软件外包行业深入分析:现状、前途、趋势、待遇 什么是软件外包 外包公司是怎么工作的 软件外包公司的面试 软件外包公司需要什么样的人
目录: [0] - 为什么要对大学生谈软件外包? [1] - 什么是软件外包? [2] - 软件为什么要外包? [3] - 为什么要承接软件外包 [4] - 做软件外包有前途吗? [5] - 外包公司 ...
- 19年7月份面试7家公司,整理的java面试题(答案自行百度解决,也是个学习的过程)
Dubbo与注册中心Zookeeper了解多少ConcurrentHashMap的原理 集合 HashMap 和 HashTable和ConcurrentHashMap的原理以及区别HashMap初始 ...
随机推荐
- Linux date命令详解
1.显示时间 date命令可以按照指定格式显示日期,只键入date则以默认格式显示当前时间.如下: 如果需要以指定的格式显示日期,可以使用“+”开头的字符串指定其格式,详细格式如下: %n : 下一行 ...
- EXCEL科学计数法转为文本格式
1.单元格格式-->特殊-->邮政编码 2.分列:选中数据-菜单栏“数据”-“分列”-下一步-下一步-选中文本-确定即可3.公式TEXT:如果数据在A列 =TEXT(A1,,0) 向下复制 ...
- 批处理命令——call 和 start
一.call命令总结 [1]call命令简介 学过汇编或C的朋友,肯定都知道call指令表示什么意思.其实,在这里它的意思也是一样的.在批处理脚本中,call命令用来从一个批处理脚本中调用另一个批处理 ...
- 【Java EE 学习 28 上】【oracle学习第二天】【子查询】【集合运算】【几种数据库对象】
一.子查询 1.为什么要使用子查询:问题不能一步求解或者一个查询不能通过一步查询得到. 2.分类:单行子查询和多行子查询. 3.子查询的本质:一个查询中包含了另外一个或者多个查询. 4.使用子查询的规 ...
- 基于Netty4的HttpServer和HttpClient的简单实现
Netty的主页:http://netty.io/index.html 使用的Netty的版本:netty-4.0.23.Final.tar.bz2 ‐ 15-Aug-2014 (Stable, Re ...
- IOC装配Bean(注解方式)
Spring的注解装配Bean Spring2.5 引入使用注解去定义Bean @Component 描述Spring框架中Bean Spring的框架中提供了与@Component注解等效的三个注解 ...
- (iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题
我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Bas ...
- Sharepoint页面项目展示画廊纯前端实现,后端用list/library简单维护
需求背景: Sharepoint页面项目展示画廊.图片+文字,要求图片与文字用Sharepoint Library维护,然后在sharepoint页面上被调用,生成项目展示画廊. 解决方案(纯前端), ...
- 2016 Multi-University Training Contest 1 C.Game
Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- Spring Autowired 注入失败总是Null
报错:NullPointerException 分析:错误原因是注入失败? <context:annotation-config/> <context:component-scan ...