Fizz Buzz programming
来源:互联网 发布:ps软件的使用方法 编辑:程序博客网 时间:2024/05/06 15:31
Fizz Buzz挺有趣的题目,我现在是按照这个题目简单的实现了编码测试.
1. 题目:
Inverse Fizz Buzz
Thisis a lot more complicated than the fizzbuzz problem, and takes some realthinking to get right.
Theaim of the test is to discover the shortest sequence of consecutive numbers,which when they are run through the fizzbuzz algorithm produce the requiredoutput.
Forexample, the shortest sequence that producesfizz
is 3
Whenlooking for the shortest sequence for
fizz buzz
onesequence that produces that output is
3, 4, 5
However,this isn't the shortest. The shortest sequence is 9, 10
Inour case, we are only interested in the numbers between 1 and 100, so be sureyou limit your calculations to that range, otherwise you are likely to exceedtimeout limits.
2. Code:
InverseFizzBuzz.java
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.}
git clone http://git.devtest.net/525f3dd13886977b57372de12c9c0818e633b3e74eb694027a7ee40333f4d230.git devtest
完整的编码及测试:http://download.csdn.net/detail/qiu_11/7791551
写的很简陋,有兴趣的同学可以继续研究。
- Fizz Buzz programming
- Fizz Buzz
- Fizz Buzz
- Fizz Buzz
- Fizz Buzz
- Fizz Buzz
- Fizz Buzz
- Fizz Buzz
- Fizz Buzz
- Fizz Buzz
- Fizz Buzz
- Fizz Buzz
- Fizz Buzz
- Fizz Buzz
- [刷题]Fizz Buzz
- 题目:Fizz Buzz
- LintCode: Fizz Buzz
- Fizz Buzz 问题
- 图像处理之基本阀值操作
- 按照文件名的数字大小排序文件
- Java反射机制
- shell脚本分析 nginx日志访问次数最多及最耗时的页面(慢查询)
- Boost安装
- Fizz Buzz programming
- 如果你想学好编程!就一定要看这个!对无论有多厉害的你有很多帮助!
- ActivityManager: Warning: Activity not started, its current task has been brought to the front
- 现场清理sqlserver2008数据库日志语句备份
- .net中使用Ajax
- projecteuler---->problem=27----Quadratic primes
- 演讲大厅安排
- hdu1205 吃糖果(鸽笼原理)
- STL基本用法总结