for文縛りのFizzBazz
だいぶ前に学校でFizzBazzの課題が出された時に普通のif分岐のものを書くのが退屈だったので、for文のみで書いてみました。
案外難しく、大変だったですけど結構楽しめました。
文字列処理を多用しているので、プログラミングを少し学んだ人の練習などにいいかもしれません。
ソースコード置いときます。もっと賢い方法があれば教えてください!
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> void slide();//配列の位置を前にずらす void dspace();//先頭の空白を削除する int main(int argc, char const *argv[]) { char n[100][16]; int i,j; for(i=1;i<=100;i++) { sprintf(n[i-1],"%d",i);//数値を文字列に変換し配列に格納 strcat(n[i-1]," ");//空白追加 } for(i=3;i<=100;i+=3)//3の倍数 strcat(n[i-1],"Fizz"); for(i=5;i<=100;i+=5)//5の倍数 { strcat(n[i-1],"Buzz"); slide(n[i-1],2);//先頭の数字を消す } for(i=3;i<=100;i+=3) slide(n[i-1],2);//3の倍数の先頭の数字を消す slide(n[99],3);//最後だけ3ケタのため消す文字数を変更 for(i=0;i<100;i++) { for(j=0;j<strlen(n[i]);j++) dspace(n[i]);//先頭の空白を全て削除 printf("%s\n",n[i]);//表示 } return 0; } void slide(char *n,int len) { int i,j; for(j=0;j<len;j++)//消す文字数の分のループ for(i=0;i<strlen(n);i++)//前に一つずらす n[i] = n[i+1]; n[i] = '\0';//文字列の直後にnull文字を追加 } void dspace(char *n) { int i; for(i=0;isspace(n[i]);i++)//空白文字が先頭にあればずらす slide(n,1); }