用代码挑战

    思路: 输入3个数x,y,z,根据不同的条件输出不同的字符串,

    x 的倍数 输出 Fizz, y 的倍数 输出 Buzz,  z 的倍数 输出 Whizz ...

    原题要求总共有 8种输出,  1)该数本身, 2)Fizz, 3)Buzz, 4)Whizz, 5)FizzBuzz.....8)FizzBuzzWhizz

    如果用3位二进制 来表示输出的字符  000:该数本身, 001:Fizz ,010:Buzz, 100:Whizz, 011:FizzBuzz, 110:BuzzWhizz ...

    用十进制表示就是                    0:该数本身,  1:Fizz,   2:Buzz,   4:Whizz,   3:FizzBuzz,   6:BuzzWhizz...

    用一个level表示一个数该对应哪些输出, 是x的倍数, level=(001)=1;  是y的倍数,level=(010)=2; 是x,y的公倍数 则level =(011)= 1+2; 是y,z的倍数,level=(110)=2+4;以此类推

    最后判断这个数包不包含x,认为x=0,x!=0两种情况 若包含x,则level=1

    下面只需要 i=1:100,遍历计算每一个i对应的level值,将其输出即可

#include <stdio.h>
 void print(int i,int level)
 {
     switch(level)
     {
     case 0:
        printf("%d\n",i);
        break;
     case 1:
        printf("Fizz\n");
        break;
     case 2:
        printf("Buzz\n");
        break;
     case 3:
        printf("FizzBuzz\n");
        break;
     case 4:
        printf("Whizz\n");
        break;
     case 5:
        printf("FizzWhizz\n");
        break;
     case 6:
        printf("BuzzWhizz\n");
        break;
     case 7:
        printf("FizzBuzzWhizz\n");
        break;
     default:
        break;
     }
 }
 int main()
 {
     int x,y,z;
     int i=0;
     int level;
     scanf("%d,%d,%d",&x,&y,&z);
     while(++i<=100)
     {
         level = 0;
         // 判断保证除数不为0
         if(x && !(i%x)) level += 1;
         if(y && !(i%y)) level += 2; 
         if(z && !(i%z)) level += 4; 
         if(!x) // x == 0 只需要判断个位数是不是0,即可判断包不包含x
         {
         	// i+10 保证 i<10的时候不被错判
         	if(!((i+10)%10)) level =1;
         }
         else        
         {
          	if((i%10)==x || (i/10)==x || (i/100)==x/* only x==1 && i==100 */) 
          		level = 1;
         }
         printf("%3d: ",i); /// 这一行为了方便观察输出
         print(i, level);
         
     }
     return 0;
 }


你可能感兴趣的:(c/c++)