3. package devtest;
4.
5. import java.util.Iterator;
6. import java.util.Map;
7. import java.util.Set;
8. import java.util.TreeMap;
9. import java.util.logging.Logger;
10.
11. public class InverseFizzBuzz {
12.
13.
14. private Logger logger = Logger.getLogger(InverseFizzBuzz.class.getName());
15.
16. private Integer[] finalRange = null;
17.
18. private final int FizzDivisor = 3;
19. private final int BuzzDivisor = 5;
20.
21. private String pattern = "";
22.
23. /**
24. * FIZZ i % 3 == 0
25. */
26. private static final String FIZZ = "fizz";
27. /**
28. * BUZZ i % 5 == 0;
29. */
30. private static final String BUZZ = "buzz";
31.
32.
33. private static final String FizzBuzz="fizzbuzz";
34.
35.
36. private static final String BuzzFizz="buzzfizz";
37.
38.
39. private static final String FizzBuzzFizz="fizzbuzzfizz";
40.
41.
42. private static final String FizzFizz="fizzfizz";
43.
44.
45. private static final String FizzFizzBuzz="fizzfizzbuzz";
46.
47. /**
48. *
49. */
50. public InverseFizzBuzz(String[] list) {
51. logger.info("Fizz Divisor = " + FizzDivisor);
52. logger.info("Buzz Divisor = " + BuzzDivisor);
53. for(String s : list){
54. this.pattern = this.pattern + s;
55. }
56. }
57. private void calculateFIZZ(){
58. for(int i = 1 ; i <= 100 ; i++){
59. if (i % FizzDivisor == 0 && i % BuzzDivisor != 0) {
60. this.finalRange = new Integer[] { i };
61. break;
62. }
63. }
64. }
65.
66. private void calculateBUZZ(){
67. for(int i = 1 ; i <= 100 ; i++){
68. if (i % FizzDivisor != 0 && i % BuzzDivisor == 0) {
69. this.finalRange = new Integer[] { i };
70. break;
71. }
72. }
73. }
74.
75. private void calculateFizzBuzz(){
76. for(int i = 1 ; i <= 100 ; i++){
77. if (i % FizzDivisor == 0 && (i+1) % BuzzDivisor == 0) {
78. this.finalRange = new Integer[] { i ,i+1};
79. break;
80. }
81. }
82. }
83. private void calculateBuzzFizz(){
84. for(int i = 1 ; i <= 100 ; i++){
85. if (i % BuzzDivisor == 0 && (i+1) % FizzDivisor == 0) {
86. this.finalRange = new Integer[] { i ,i+1};
87. break;
88. }
89. }
90. }
91. private void calculateFizzBuzzFizz(){
92. Map<Integer,String> hashMap = new TreeMap<Integer,String>();
93. int num1 = 1, num2 = 1, num3 = 1;
94. for (int i = 1; i <= 100; i++) {
95. if (i % FizzDivisor == 0 && i % BuzzDivisor != 0) {
96. hashMap.put(i, FIZZ);
97. } else if (i % FizzDivisor != 0 &&i % BuzzDivisor == 0) {
98. hashMap.put(i,BUZZ);
99. }
100. }
101. Set<Integer> keySet = hashMap.keySet();
102. boolean bool = false;
103. for (Iterator<Integer> it = keySet.iterator(); !bool && it.hasNext();) {
104. int key = it.next();
105. String keyValue = hashMap.get(key);
106. if(keyValue.equals(FIZZ)){
107. if(num1 == 1){
108. num1 = key;
109. }else{
110. num3 = key;
111. }
112. }else if(keyValue.equals(BUZZ)){
113. num2 = key;
114. }
115.
116. if(num1 != 1 && num2 != 1 && num3 !=1 && num1 < num2 && num2 < num3){
117. this.finalRange = new Integer[num3-num1 + 1];
118. for(int j=0,i = num1; i <= num3 ; i ++,j ++){
119. this.finalRange[j] = i;
120. }
121. bool = true;
122. }
123. }
124. }
125.
126. private void calculateFizzFizz(){
127. Map<Integer,String> hashMap = new TreeMap<Integer,String>();
128. int num1 = 1, num2 = 1;
129. for (int i = 1; i <= 100; i++) {
130. if (i % FizzDivisor == 0 && i % BuzzDivisor != 0) {
131. hashMap.put(i, FIZZ);
132. }
133. }
134. Set<Integer> keySet = hashMap.keySet();
135. int buff = 0;
136. boolean bool = false;
137. for (Iterator<Integer> it = keySet.iterator(); !bool && it.hasNext();) {
138. buff = it.next();
139. if(num1 == 1 && num2 == 1){
140. num1 = buff;
141. num2 = buff;
142. }else{
143. num2 = buff;
144. }
145. boolean flag = false;
146. if(num1 != 1 && num2 != 1 && num1 < num2){
147. for(int i = num1; i <= num2 ; i ++){
148. if( i % BuzzDivisor != 0){
149. continue;
150. }else{
151. num1 = num2 ;
152. flag = true;
153. break;
154. }
155. }
156. if(!flag){
157. setData(num2,num1);
158. bool = true;
159. }
160. }
161. }
162. }
163.
164.
165. /** <Description functions in a word>
166. * <Detail description>
167. * @author Peter.Qiu [Parameters description]
168. * @return void [Return type description]
169. * @exception throws [Exception] [Exception description]
170. * @see [Related classes#Related methods#Related properties]
171. */
172. private void calculateSequenceRange(){
173. if(this.pattern.equals(FIZZ)){
174. calculateFIZZ();
175. }else if(this.pattern.equals(BUZZ)){
176. calculateBUZZ();
177. }else if(this.pattern.equals(FizzBuzz)){
178. calculateFizzBuzz();
179. }else if(this.pattern.equals(BuzzFizz)){
180. calculateBuzzFizz();
181. }else if(this.pattern.equals(FizzBuzzFizz)){
182. calculateFizzBuzzFizz();
183. }else if(this.pattern.equals(FizzFizz)){
184. calculateFizzFizz();
185. }else if(this.pattern.equals(FizzFizzBuzz)){
186. calculateFizzFizzBuzz();
187. }
188. }
189. private void calculateFizzFizzBuzz(){
190. calculateFizzFizz();//shortest of FizzFizz
191. int maxRange = this.finalRange[finalRange.length - 1];//
192. int minRange = this.finalRange[0];//
193. for(int i = maxRange ; i <= 100 ; i ++){
194. if(i % BuzzDivisor == 0){
195. maxRange = i;
196. break;
197. }
198. }
199. setData(maxRange,minRange);
200. }
201.
202. private void setData(int max, int min){
203. this.finalRange = new Integer[max- min + 1];
204. for(int j =0, i = min ; i <= max ; i++,j++ ){
205. this.finalRange[j] = i;
206. }
207. }
208. private void displayInfo() {
209. logger.info("=======Dispaly Info Start===============");
210. logger.info(this.pattern);
211. String result = "";
212. for(int i = 0 ; finalRange !=null && i < finalRange.length ; i ++){
213. Integer num = finalRange[i];
214. if(i < finalRange.length - 1){
215. result += num+",";
216. }else{
217. result += num;
218. }
219. }
220. logger.info(result);
221. logger.info("=======Dispaly Info End==============");
222. }
223.
224. public Integer[] sequence() {
225. calculateSequenceRange();
226. displayInfo();
227. return finalRange;
228. }
229.
230.}
|
相关推荐
《Fizz Buzz算法详解》 Fizz Buzz算法,作为一个经典的面试题,常常被用于考察候选人的编程基础和逻辑思维能力。这个看似简单的游戏规则背后,蕴含着基础的编程逻辑和条件判断的知识点,对于初学者和有经验的开发者...
Fizz Buzz是一种经典的编程练习,常用于面试或教学中,旨在帮助初学者理解基本的控制流、条件语句和循环。这个题目要求编写一个程序,打印从1到指定数(通常是100)的所有数字,但对于3的倍数,打印"Fizz"代替数字,...
Fizz buzz 是一个简单的数学游戏,其中每个可以被 3 整除的数字都被替换为“Fizz”这个词,每个可以被 5 整除的数字都被替换为“Buzz”,以及每个可以被两者整除的数字得到“嘶嘶声”。 这些短程序中的任何一个的...
如果 n 是3的倍数,输出“Fizz” 如果 n 是5的倍数,输出“Buzz” 如果 n 同时是3和5的倍数,输出 “FizzBuzz” 示例: n = 15, 返回: [ 1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, ...
Fizz Buzz游戏是一个经典的编程练习,通常用于面试或教学目的,以测试候选人的基本编程技能和逻辑思维能力。这个游戏的规则相当简单:从1开始,对于每个数字,你需要根据以下规则打印出相应的输出: 1. 如果数字是3...
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28, 29, FizzBuzz, 31, 32, Fizz, 34, Buzz, Fizz, ... 概述 Fizz ...
【Fizz Buzz服务详解】 Fizz Buzz服务,简称FBaaS,是一种基于网络的编程挑战或测试工具,它实现了经典的Fizz Buzz问题的在线版本。Fizz Buzz问题是一个常见的面试题,旨在考察候选人的编程逻辑和基本的控制流理解...
Fizz Buzz计算器是一个经典的编程练习,通常用于面试或教学中,以测试候选人的基本编程技能和逻辑思维能力。这个挑战的基本规则是打印从1到指定数(例如100)的所有整数,但遇到以下情况时要遵循特定规则: 1. 当...
#Fizz Buzz 创建一个函数来返回Fizz 、 Buzz 、 FizzBuzz或它接收到的参数,这一切都取决于函数的参数,一个可以分别被3 、 5或3和5整除的数字。 当数字不能被3或5整除时,应返回数字本身。如何运行这个实验室克隆...
在IT行业中,`Fizz Buzz` 是一个非常经典的面试问题,主要用来评估候选人的编程基础和逻辑思维能力。这个挑战要求编写一个程序,打印从1到指定数字(通常为100)的序列,但遇到3的倍数时输出 "Fizz",5的倍数输出 ...
嘶嘶声Thinkful FEWD 项目的基本 JavaScript Fizz Buzz 页面 。
fizz-buzz-pop-js 在JavaScript中使用Fizz Buzz Pop 该存储库中的代码用于演示如何使用NodeJS创建开源端到端解决方案。 此解决方案还提供了将库直接自动发布到NpmJS注册表的功能。 使用的技术: 节点npm 特拉维斯...
"Fizz Buzz"是一个经典的编程练习,它要求程序员编写一个程序,对从1到指定数的数字序列进行遍历。当数字可以被3整除时,输出“Fizz”;当数字可以被5整除时,输出“Buzz”;如果既能被3又能被5整除,则输出“Fizz ...
c语言入门 c语言_leetcode题解412-fizz-buzz.c
【标题】"kata2TDD-FizzBuzz:Kata TDD - 持续集成 - Fizz Buzz" 是一个编程练习,旨在帮助开发者通过测试驱动开发(Test-Driven Development, TDD)方法来实现一个Fizz Buzz问题,并结合持续集成(Continuous ...
嘶嘶声 FizzBuzz 是一款流行的游戏,作为编程任务在求职面试... 如果这个数字能被 3 整除打印 Fizz 如果数字可以被 5 整除,则打印 Buzz 如果数字可以被 3 和 5 整除 (15) 打印 FizzBuzz 否则,打印数字。
c++ C++_leetcode题解之412_Fizz_Buzz.cpp
FizzBuzzJS javaScript 中的 Fizz Buzz 测试“编写一个程序,打印从 1 到 100 的数字。但是对于 3 的倍数打印“Fizz”而不是数字,对于 5 的倍数打印“Buzz”。对于同时是 3 和 5 的倍数的数字打印“FizzBu...
Fizz Buzz】是一个经典的编程问题,它涉及到条件判断、循环控制以及字符串操作等基础知识。这个问题的目标是编写一个程序,打印从1到n的数字序列,但遇到以下特殊情况时,用特定的词替换数字: 1. 当数字可以被3...
python python_leetcode面试题解之第412题Fizz_Buzz