縛り FizzBuzz
if, switch, 三項演算子を使わず,更に剰余演算子も使わないでやる FizzBuzz.
#include <iostream> using namespace std; //0 : number, 1 : Fizz, 2 : Buzz, 3 : FizzBuzz int function_index_table[15] = {0, 0, 1, 0, 2, 1, 0, 0, 1, 2, 0, 1, 0, 0, 3}; int next_index[15] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0}; void print_number(int x) { cout << x << " "; } void print_fizz(int x) { cout << "Fizz "; } void print_buzz(int x) { cout << "Buzz "; } void print_fizzbuzz(int x) { cout << "FizzBuzz "; } typedef void (*print_function_t)(int); print_function_t print_functions[4] = { print_number, print_fizz, print_buzz, print_fizzbuzz }; int main() { for (int i = 1, index = 0; i <= 100; ++i) { (*print_functions[function_index_table[index]])(i); index = next_index[index]; } cout << endl; }