리포트인데 마감일이 지났는데두 아직두 못내구 있네여.
제실력으로는...ㅠ.ㅠ 혼자 해볼려구 했는데 안되네여 도와주세요...
볼렌드 c++로 수업하거든여 매직 스퀘어인데..
#include<stdio.h>
#define MaxSize 77 //최대 스퀘어 크기 지정
int square[MaxSize][MaxSize];
void main()
{
int n,k,l,j,key; //변수 지정
//아래코드는 신상정보 표시
printf("____________________________________________________________________________\n");
printf("\n 자료구조\n");
printf(" 동의공업대학 인터넷정보과\n");
printf(" 200153319 황정옥”);
printf("\n___________________________________________________________________________\n");
printf("매직 스퀘어 크기 입력 [01-77] : ");
scanf("%d",&n);
if ((n>(MaxSize))||(n<1)) { //범위가 넘었을때 메세지
printf("\n[도우미] : 범위가 넘었습니다.\n");
printf(" 범위는 1에서 77까지입니다.\n");
}
else if (!(n%2)) { //짝수일때 메세지
printf("\n[도우미] : 짝수입니다. \n");
printf(" 짝수는 매직스퀘어 형식에 안 맞아요.\n" );
}
else {
for (int i=0;i< n;i++) //변수 i 초기화
for(int j=0;j< n;j++)
square[i][j]=0;
square[0][(n-1)/2]=1; //맨처음위치. 즉 맨위가운데 시작위치.
key=2;
i=0;
j=(n-1)/2;
while(key<=n*n){
if (i-1< 0) k=n-1;else k=i-1; //현 위치에서 왼쪽위로 옮김
if (j-1< 0) l=n-1;else l=j-1;
if (square[k][l]) i=(i+1)%n; //만일 왼쪽위에 값이 있으면 아래로 옮김
else {
i=k;
j=l;
}
square[i][j]=key; //실제로 대입될 수
key++;
}
printf("\n매직 스퀘어 결과 출력 \n\n"); //출력화면
for (i=0;i< n;i++){
for (j=0;j< n;j++)
if (square[i][j] < 10) printf(" %d ",square[i][j]); //화면맞추기위해
else if (square[i][j] < 100) printf(" %d ",square[i][j]); //화면맞추기위해
else printf("%d ",square[i][j]);
if (!(j%n)) printf("\n");
}
}
printf("\n아무키를 누르시면 끝나요.");
}
이까지했는데 이걸 파일로 출력하려면 fprintf 이걸 쓰라구 하던데, 아직 그건안배웠거든여 그리고 지금 소스는 결과값이 합계가 안나와요! 이렇게 나와야 하는데..
3x3의 경우
합
값1 값2 값3 합
값4 값5 값6 합
값7 값8 값9 합
합 합 합 합 이런식으로 나와야 하거든여 그럼 어케 고쳐야하나여? 이시간까지 눈빠져라 이러구 있습니다.. 낮에는 회사서 일하고, 밤에는 학교가고 ~ 무자게 힘드네여...아직 씨에는 무지 초보라서 잘아시는분들 갈켜주세여~
제발 ㅠ.ㅠ
|