この問題で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;
}