思路: 输入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; }