FizzBuzzに関する5つの問題を解いた
Qiitaを眺めていたら、面白い記事を見つけた。 qiita.com ということで、僕も解いてみた(発展質問はまだ解いてない)
[質問1] 1から100までの数をプリントするプログラムを書けるか?
#include<stdio.h> int main(void) { int i; for (i=1;i<=100;i++) { printf("%d\n",i); } return 0; }
[質問2] 3の倍数なら「Fizz」 5の倍数なら「Buzz」 両方の倍数なら「FizzBuzz」
1 #include<stdio.h> 2 3 int main(void) 4 { 5 6 int i=1; 7 8 while(i<100) 9 { 10 if((i%3 == 0)&&(i%5 == 0)) printf("FizzBuzz\n"); 11 else if(i%3 == 0) printf("Fizz\n"); 12 else if(i%5 == 0) printf("Buzz\n"); 13 else printf("%d\n",i); 14 i++; 15 } 16 return 0; 17 18 }
[質問3] FizzBuzzを関数に分割できるか?
1 #include<stdio.h> 2 3 void toFizzBuzz(int n); 4 5 int main(void) 6 { 7 int i = 1; 8 9 while(i<=100) 10 { 11 toFizzBuzz(i); 12 i++; 13 } 14 return 0; 15 } 16 17 18 19 void toFizzBuzz(int n) 20 { 21 if ((n%3 == 0)&&(n%5 == 0)) printf("FizzBuzz\n"); 22 else if(n%3 == 0) printf("Fizz\n"); 23 else if(n%5 == 0) printf("Buzz\n"); 24 else printf("%d\n",n); 25 }
#include<stdio.h> #include<assert.h> #include<stdlib.h> #include<string.h> #define N 256 char fizzbuzz[30]="FizzBuzz"; char fizz[30]="Fizz"; char buzz[30]="Buzz"; char *toFizzBuzz(int n); int main(void) { int i = 1; while(i<=100) { assert(toFizzBuzz(2)=="FizzBuzz"); toFizzBuzz(i) printf("%s\n",toFizzBuzz(i)); i++; } return 0; } char *toFizzBuzz(int n) { if ((n%3 == 0)&&(n%5 == 0)){ return "FizzBuzz"; }else if(n%3 == 0){ return "Fizz"; }else if(n%5 == 0){ return "Buzz"; }else{ static int tes; tes = n; static char s1[N] = {'\0'}; sprintf(s1,"%d",tes); return s1; } }
[質問5] HTML出力とテキスト出力を簡単にスイッチできるようにできるか?
これに関しては、元の記事の関数の処理のsprintfの出力文字列に指定してある記法で表記できることをゴールとした。 また、実行した際に、scanfでどちらにスイッチするか聞けるようにした。
#include<stdio.h> #include<assert.h> #include<stdlib.h> #include<string.h> #define N 256 static int flag1=0; static int flag2=0; static int flag3=0; //char ans[30]={'\0'}; char fizzbuzz[30]="FizzBuzz"; char fizz[30]="Fizz"; char buzz[30]="Buzz"; //int num = 0; char *toFizzBuzz(int n); char *html_printer(char *elements); char *text_printer(char *elements); int main(void) { int i = 1; char s[N]; char text[50] = {'\0'}; printf("html出力?:Y/N"); scanf("%s",text); while(i<=100) { if(text[0] == 'Y') { char *ans = toFizzBuzz(i); //ここはhtml出力用 printf("%s\n",html_printer(ans)); }else{ char *ans = toFizzBuzz(i); //ここはtext出力用 printf("%s\n",text_printer(ans)); } i++; } return 0; } char *toFizzBuzz(int n) { if ((n%3 == 0)&&(n%5 == 0)){ return "FizzBuzz"; }else if(n%3 == 0){ return "Fizz"; }else if(n%5 == 0){ return "Buzz"; }else{ static int tes; tes = n; static char s1[N] = {'\0'}; sprintf(s1,"%d",tes); return s1; } } char *html_printer(char *elements) { static char s[] = {'\0'}; int len = 0; int i = 0; len = strlen(elements);//文字列の要素数取得 for(i=0; i<len; i++) { sprintf(s,"<li>%s</li>\n",elements); } return s; } char *text_printer(char *elements) { static char s2[] = {'\0'}; int len = 0; int i = 0; len = strlen(elements);//文字列の要素数取得 for(i=0; i<len; i++) { sprintf(s2,"{%s}\n",elements); } return s2; }