c++基礎の質問
Posted: 2013年9月21日(土) 04:30
c言語の基礎、配列を使用しての奇数魔法陣についてです。
以下のようなプログラムをうってみたのですが、真っ暗な画面が表示されるだけでエラーすら表示されません。
色々考えて試してはみたのですが、どこを直せば良いのか分からず困っています。
初歩的な質問ですみませんが、回答よろしくお願いします。
ルールは、
魔法陣は5×5
スタートは上真ん中
右上に進む
上へはみ出すとはみ出した列の一番下へ
右にはみ出すとはみ出した行の一番左へ
隅からはみ出すとはみ出す前の列のひとつ下へ
もう数字が入っている場合は前の列のひとつ下へ
このアルゴリズムも、合っているかは確信がありません。
ソースコードは以下です。
[code]
#include<stdio.h>
int main(void)
{
int square[5][5]; // 魔方陣を格納する変数
// 魔方陣を初期化
int i, j;
for(i=0;i<5*5-1;i++)
{
for(j=0;j<5*5-1;j++)
{
square[i][j]=0;
}
}
// 魔方陣を生成
int number;
number = 1;
// 最上段中央からはじめる
i = 1;
j = (5 / 2) + 1;
square[i][j] = number;
number++;
for( number = 2; number <= 5 * 5; number++ ) // 2以降はここで処理
{
// 右上に移動
i--;
j++;
while( square[i][j] != 0 ) // 右上に数字を置けないとき
{
if(i==0||i==6) // マトリックスから上にはみ出した
i = 5;
if(j==0||j==5+1) // 横にはみ出した
j = 1;
if(i==5||j==5) // 隅に来た
i += 2;
j--;
if(square[i][j]!=0) // 先客がいる
i += 2;
j--;
}
square[i][j] = number; // 魔方陣に数字を置く
}
// 魔方陣を表示する
for( i = 1; i <= 5 ; i++ )
{
for( j = 1; j <= 5 ; j++ )
printf( "%4d", square[i][j] );
printf( "\n" );
}
printf( "\n" );
return 0;
}
[/code]
ソースコード用のタグで囲ったところ、正しく表示されなかった為BBcodeを使用していません。
色が変わっておらず、見づらくなってしまいすみません。
よろしくお願いします。
以下のようなプログラムをうってみたのですが、真っ暗な画面が表示されるだけでエラーすら表示されません。
色々考えて試してはみたのですが、どこを直せば良いのか分からず困っています。
初歩的な質問ですみませんが、回答よろしくお願いします。
ルールは、
魔法陣は5×5
スタートは上真ん中
右上に進む
上へはみ出すとはみ出した列の一番下へ
右にはみ出すとはみ出した行の一番左へ
隅からはみ出すとはみ出す前の列のひとつ下へ
もう数字が入っている場合は前の列のひとつ下へ
このアルゴリズムも、合っているかは確信がありません。
ソースコードは以下です。
[code]
#include<stdio.h>
int main(void)
{
int square[5][5]; // 魔方陣を格納する変数
// 魔方陣を初期化
int i, j;
for(i=0;i<5*5-1;i++)
{
for(j=0;j<5*5-1;j++)
{
square[i][j]=0;
}
}
// 魔方陣を生成
int number;
number = 1;
// 最上段中央からはじめる
i = 1;
j = (5 / 2) + 1;
square[i][j] = number;
number++;
for( number = 2; number <= 5 * 5; number++ ) // 2以降はここで処理
{
// 右上に移動
i--;
j++;
while( square[i][j] != 0 ) // 右上に数字を置けないとき
{
if(i==0||i==6) // マトリックスから上にはみ出した
i = 5;
if(j==0||j==5+1) // 横にはみ出した
j = 1;
if(i==5||j==5) // 隅に来た
i += 2;
j--;
if(square[i][j]!=0) // 先客がいる
i += 2;
j--;
}
square[i][j] = number; // 魔方陣に数字を置く
}
// 魔方陣を表示する
for( i = 1; i <= 5 ; i++ )
{
for( j = 1; j <= 5 ; j++ )
printf( "%4d", square[i][j] );
printf( "\n" );
}
printf( "\n" );
return 0;
}
[/code]
ソースコード用のタグで囲ったところ、正しく表示されなかった為BBcodeを使用していません。
色が変わっておらず、見づらくなってしまいすみません。
よろしくお願いします。