FizzBuzz问题

  关于FizzBuzz问题,我想大家都会想到用”整除”的方法,但是今天我看到一篇博客,用的是“计步”的方法,具体怎么计步呢?
  先把问题简述一下,写一个程序打印1到100这些数字。但是遇到数字为3的倍数的时候,打印“Fizz”替代数字,5的倍数用“Buzz”代替,既是3的倍数又是5的倍数打印“FizzBuzz”。
  简单的说,计步就是当没遇到3或5的倍数时,计步值从1开始,周期分别是1,2,3和1,2,3,4,5。当遇到3或5的倍数时,将计步数字置为1,继续计步,这样的话,当3的计步值和5的计步值分别为3和5时,则既是3的倍数又是5的倍数。
下面是我对代码的理解,如果你还不理解,可以自己从1开始,计算一下,理解的会更深刻,另外如果我的语言表达的不清楚,请批评指点。

package com.ustc.fizzbuzz;
/**
 * 
 * @author JBaymax
 *写一个程序打印1到100这些数字。
 *但是遇到数字为3的倍数的时候,打印“Fizz”替代数字,
 *5的倍数用“Buzz”代替,既是3的倍数又是5的倍数打印“FizzBuzz”。
 */
public class FizzBuzz {
    public static void main(String[] args) {
        int i;
        int step3 = 1,step5 = 1;     // 步长计数
        int FizzStat = 0, BuzzStat = 0, FizzBuzzStat = 0;
        for(i = 1; i <= 100; i++){
            if((3 == step3 )&&(5 == step5)){
                // 既是3的倍数又是5的倍数就打印“FizzBuzz”
                System.out.println("FizzBuzz = " + i);
                step3 = 1;
                step5 = 1;
                FizzStat++;
                BuzzStat++;
                FizzBuzzStat++;
            }else if(3 == step3){
                //3的的倍数就打印“Fizz”
                System.out.println("Fizz = " + i);
                step3 = 1;  // 当1,2 not Fizz Buzz后,3 == step3,这里的step3从3变成1,为什么要置1?step5是4
                step5++;
                FizzStat++; // FizzStat表示遇到了几次3,可以理解为针对3的倍数出现的次数进行count++
            }else if(5 == step5){
                // 5的倍数就打印“Buzz”
                System.out.println("Buzz = " + i);
                step3++;     // 当4 not Fizz Buzz后,5 == step5,step3是2
                step5 = 1;   // 现在知道为什么要置1了吧,就是每走3步,必然会是3的倍数,
                             //每走5步必然会是5的倍数,当每次相等之后,需要重新计步
                BuzzStat++;  // BuzzStat表示遇到了几次5,可以理解为针对5的倍数出现的次数进行count++
            }else{
                System.out.println("not Fizz Buzz = " + i);
                step3++;  // 走过3之后,走4,step3从1继续加,++后step3是2
                step5++;  // 走过3之后,走4,step5从4继续加,++后step5是5
            }

        }
    System.out.println("Fizz = " + FizzStat + ",Buzz =" + BuzzStat +",FizzBuzz = " + FizzBuzzStat); 

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值