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 algorithm
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:Fizz Buzz计算器
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 、 FizzBuzz或它接收到的参数,这一切都取决于函数的参数,一个可以分别被3 、 5或3和5整除的数字。 当数字不能被3或5整除时,应返回数字本身。如何运行这个实验室克隆...
嘶嘶声-嗡嗡声-java Fizz Buzz kata的源代码。 视频位于: :
嘶嘶声嗡嗡声python Jeu Fizz Buzz en Python
嘶嘶声Thinkful FEWD 项目的基本 JavaScript Fizz Buzz 页面 。
嘶嘶声 Fizz Buzz进行了一些测试!
嘶嘶声 FizzBuzz 是一款流行的游戏,作为编程任务在求职面试... 如果这个数字能被 3 整除打印 Fizz 如果数字可以被 5 整除,则打印 Buzz 如果数字可以被 3 和 5 整除 (15) 打印 FizzBuzz 否则,打印数字。
fizz-buzz-pop-js 在JavaScript中使用Fizz Buzz Pop 该存储库中的代码用于演示如何使用NodeJS创建开源端到端解决方案。 此解决方案还提供了将库直接自动发布到NpmJS注册表的功能。 使用的技术: 节点npm 特拉维斯...
java代码-LeetCode 412. Fizz Buzz
FizzBuzzJS JavaScript 中的 Fizz Buzz,帮助从 Ruby 过渡到 Javascript
kataTDD-FizzBuzz Kata TDD - 持续集成 - Fizz Buzz
使用 JavaScript 的 Fizz Buzz 示例 此项目与 Meetup 小组“学习编码大急流城”相关联
嘶嘶声 尝试在JS中创建“ Fizz Buzz”。
FizzBuzzJS javaScript 中的 Fizz Buzz 测试“编写一个程序,打印从 1 到 100 的数字。但是对于 3 的倍数打印“Fizz”而不是数字,对于 5 的倍数打印“Buzz”。对于同时是 3 和 5 的倍数的数字打印“FizzBu...
fizbuz.biz FBaaS(Fizz Buzz即服务) curl http://fizbuz.biz/15 FizzBuzz
FizzBuzz-Parser 控制台应用程序,用于创建各种 Fizz Buzz 变体的输出