1から100までFizz Buzz
現実逃避。1から100までFizz Buzzを表示するというよくあるやつ。
#include <stdio.h> #include <stdlib.h> char *x[] = { "Fizz", "Buzz", "Fizz Buzz" }; int y[][5]={ {2, -2, -2, -2, -2}, {-1, 0, -1,-1, -2}, {-2, 1, 0, -1, -2}, {2, -2, 1, 0, -1} }; char z[100][4]; char *f(int a, int b, int c) { if (a == 1) return "1"; if (!c || y[abs(y[3][b])][abs(c) - 1] == -2) { b = (b + 1) % 5; c = y[3][b] < 0 ? -4 : 1; } while (y[abs(y[3][b])][abs(c) - 1] == -2) c++; puts(f(a - 1, b, c + 1)); return y[abs(y[3][b])][abs(c) - 1] == -1 ? sprintf(z[a - 1], "%d", a), z[a - 1] : x[y[abs(y[3][b])][abs(c) - 1]]; } int main(void) { puts(f(100, -1, 0)); return 0; }