z 자형 주사

9686 단어
문제 설명 시험 문제 번호: 201412 - 2 시험 문제 이름: Z 자형 스 캔 시간 제한: 2.0s 메모리 제한: 256.0MB 문제 설명: 문제 설명 은 이미지 인 코딩 알고리즘 에서 주어진 사각형 행렬 을 Z 자형 스 캔 (Zigzag Scan) 해 야 합 니 다.주어진 n×n 의 행렬, Z 자형 스 캔 과정 은 다음 그림 과 같다.
아래×4 의 행렬, 1, 5, 3, 7, 5, 6, 4, 7, 3, 3 을 Z 자형 으로 스 캔 한 후 길이 가 16 인 서열 을 얻 을 수 있 습 니 다. 1, 5, 3, 9, 3, 5, 5, 4, 7, 3, 6, 4, 1, 3 은 Z 자형 스 캔 프로그램 을 실현 하고 n 을 지정 하 십시오.×n 의 행렬, 출력 이 이 행렬 을 Z 자형 으로 스 캔 한 결과 입 니 다.입력 형식 입력 의 첫 줄 은 행렬 의 크기 를 나타 내 는 정수 n 을 포함 합 니 다.입력 한 두 번 째 줄 에서 n + 1 줄 까지 줄 마다 n 개의 정 수 를 포함 하고 빈 칸 으로 구분 하여 주어진 행렬 을 표시 합 니 다.출력 형식 출력 한 줄, n 포함×n 개의 정 수 는 빈 칸 으로 구분 되 어 입력 한 행렬 이 Z 자형 스 캔 을 거 친 결 과 를 나타 낸다.샘플 입력 4 1, 5, 3, 9, 3, 5, 6, 4, 6, 4, 7, 3, 3, 9, 5, 4, 3, 6, 4, 3, 6, 4, 3 평가 사례 규모 와 약정 1 ≤ n ≤ 500, 행렬 요 소 는 1000 을 초과 하지 않 는 정수 입 니 다.n = 4 를 예 로 들 어 행렬 의 좌 표를 차례대로 쓰 고 sum = 0: (0, 0) sum = 1: (0, 1) sum = 2: (2, 0) (1, 1) (0, 2) sum = 3: (0, 3) (1, 2) (3, 0) sum = 4: (3, 1) (2, 2) sum = 5: (2, 3) sum = 6: (3, 3) 총 결 규칙, sum

#include <iostream>
//#include<vector>
using namespace std;
int main()
{

    int n,i,j,k,t,sum;
    int flag=0;
    cin>>n;
    int a[510][510];
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
        cin>>t;
        a[i][j]=t;
        }
    }
    for(sum=0;sum<n;sum++)
    {
        if(flag==0)
        {
            for(j=0,i=sum-j;i>=0&&j<n;j++,i--)
            cout<<a[i][j]<<" ";
            flag=1;
        }
        else
        {
        for(i=0,j=sum-i;j>=0&&i<n;i++,j--)
        cout<<a[i][j]<<" ";
        flag=0;
        }
    }
        for(sum=n;sum<=2*(n-1);sum++)
    {
        if(flag==0)
        {
        for(i=n-1,j=sum-i;i>0&&j<n;i--,j++)
        cout<<a[i][j]<<" ";
        flag=1;
        }
        else
        {
            for(j=n-1,i=sum-j;j>0&&i<n;j--,i++)
            cout<<a[i][j]<<" ";
            flag=0;
        }
    }
}

이상 은 자신의 사고방식 에 따라 쓴 코드 로 인터넷 프로그램 을 붙 여 넣 는 것 이다. 규칙 이 같 고 문제 풀이 사고방식 에 참고 할 만 한 점 이 있다.

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<stack>
using namespace std;
#define size 500
int map[size+5][size+5];
int main(){
    int n;
    int i,j;
    cin>>n;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
        cin>>map[i][j];

        }
    }
    //int sum=3;
    //f=1,e=2;
    int nn=2*n;
    //bool b=true;//e  f 
    int a=1,b=2;
    cout<<map[1][1];
    if(n==  1)          
        return 0;
    while(a+b<=n){
        if(a==1){
            cout<<" "<<map[a][b];
            while(b>1){
                cout<<" "<<map[++a][--b];
            }
            a++;//cout<<" "<<map[][b];
        }
        else{
            if(b==1){
            cout<<" "<<map[a][b];
            while(a>1){
                cout<<" "<<map[--a][++b];
            }
            b++;//cout<<" "<<map[a][];
            }
        }
    }
    if(a==n){
        cout<<" "<<map[a][b];
        while(b<n){
            cout<<" "<<map[--a][++b];
        }
        a++;//cout<<" "<<map[][b];
    }
    else{
        cout<<" "<<map[a][b];
        while(a<n){
            cout<<" "<<map[++a][--b];
        }
        b++;//cout<<" "<<map[a][b++];
    }
    while(a+b<=nn){
        if(a==n){
            cout<<" "<<map[a][b];
            while(b<n){
                cout<<" "<<map[--a][++b];
            }
            a++;//cout<<" "<<map[][b];
        }
        else{
            if(b==n){
            cout<<" "<<map[a][b];
            while(a<n){
                cout<<" "<<map[++a][--b];
            }
            b++;//cout<<" "<<map[a][b++];
            }
        }
    }
    cout<<endl;
    return 0;
}

좋은 웹페이지 즐겨찾기