1160 뱀 모양 행렬

3101 단어 알고리즘
제목 설명 샤 오 밍 은 디지털 게임 을 하고 n 행 n 열 디지털 매트릭스 (그 중에서 n 은 100 을 초과 하지 않 는 홀수) 를 취한 다. 숫자의 보충 방법 은 행렬 중심 에서 1 부터 시계 반대 방향 으로 돌아 가 며 한 바퀴 씩 확대 한다. n 행 n 열 이 숫자 를 채 울 때 까지 n 행 n 열 정사각형 행렬 과 그 대각선 숫자의 합 을 출력 하 십시오. 알고리즘 사상: n * n 의 행렬 로 설정 하고우 리 는 네 개의 경 계 를 설정 합 니 다. up, down, left, right. 가장 중심 적 인 수의 아래 표 시 는 n / 2, n / 2 입 니 다.초기 에 우 리 는 경계 right = down = m + 1 을 설정 합 니 다.up = left = m - 1, 우리 가 오른쪽, 위, 왼쪽 아래 를 완성 할 때 rigth +;down++,up–;left–;key > n * n, 즉 행렬 이 채 워 질 때 까지 계속 순환 합 니 다. 코드 는 다음 과 같 습 니 다.
#include<iostream>
#define N 100
using namespace std;
int main()
{

    int a[N][N],n,key=2,i,j;
    cin >> n;
    int left=0,right=0,up=0,down=0,m=n/2;
    down=right=m;
    up=left=m-1;
    int row=m,col=m;
    a[row][col]=1;
    while(key < n*n)
    {
        while(key<=n*n && col <= right){
            a[row][++col]=key++;
        }
        while(key<=n*n && row > up){
            a[--row][col]=key++;
        }
        while(key<=n*n && col > left){
            a[row][--col]=key++;
        }
        while(key<=n*n && row <= down){
            a[++row][col]=key++;
        }
        right++;   //    
        down++;
        up--;
        left--;
    }
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            cout << a[i][j]<<" ";
        }  
        cout << endl;
    }
    int sum=0;   //      
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(i==j || i+j==n-1){
                sum+=a[i][j];
            }
        }
    }
    cout << sum<<endl;

}

좋은 웹페이지 즐겨찾기