この問題でif文を使うのは良くない。
for (i=0; i<=n; i++) { for (j=0; j<=n; j++) { if (i+j<=n) { printf("i=%d, j=%d \n", i, j); } } }では無駄に繰り返しをするので、
for (i=0; i<=n; i++) { for (j=0; i+j<=n; j++) { printf("i=%d, j=%d \n", i, j); } }と書くべきである。
四重ループにしている解答が何故か多かったが、基本的な部分は二重ループでできるはず。
for (i=0; i<n; i++) { for (j=0; j<n; j++) { printf("%3d %3d %3d %3d \n", i*UNIT, j*UNIT, (i+1)*UNIT, j*UNIT); printf("%3d %3d %3d %3d \n", i*UNIT, j*UNIT, i*UNIT, (j+1)*UNIT); } }あとは端の部分をどうにか工夫する。例えば、
for (i=0; i<n; i++) { printf("%3d %3d %3d %3d \n", i*UNIT, n*UNIT, (i+1)*UNIT, n*UNIT); } for (j=0; j<n; j++) { printf("%3d %3d %3d %3d \n", n*UNIT, j*UNIT, n*UNIT, (j+1)*UNIT); }
for (i=0; i<n; i++) { for (j=0; j<=n; j++) { printf("%3d %3d %3d %3d \n", i*UNIT, j*UNIT, (i+1)*UNIT, j*UNIT); printf("%3d %3d %3d %3d \n", j*UNIT, i*UNIT, j*UNIT, (i+1)*UNIT); } }
10という magic numberはプログラム中に埋め込んではいけない。 必ず定数マクロを使うこと。
int min(int x, int y, int z) { int min = x; if (y < min) { min = y; } if (z < min) { min = z; } return min; }