CCF-Z字形扫描

 

那一天我二十一岁,在我一生的黄金时代,我有好多奢望。我想爱,想吃,还想在一瞬间变成天上半明半暗的云,后来我才知道,生活就是个缓慢受锤的过程,人一天天老下去,奢望也一天天消逝,最后变得像挨了锤的牛一样。可是我过二十一岁生日时没有预见到这一点。我觉得自己会永远生猛下去,什么也锤不了我。-----《黄金时代》

今天一天很颓废呀~追了两集电视剧~看了一集综艺~时间就不知不觉溜走了~在我的黄金时代我发现自己还挺空虚的呵呵呵~

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int matrix[550][550];
int result[300000];
int main()
{
   int n;
   scanf("%d", &n);
   memset(matrix, 0, sizeof(matrix));
   memset(result, 0, sizeof(result));
   for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
        scanf("%d", &matrix[i][j]);
        int bex = 0, eny = 0, cnt = 0;
        result[cnt] = matrix[bex][eny];
        for(int i=0; i<n-2; i++)
        {
            int flag = 0;
            if(!bex)
            {result[++cnt] = matrix[bex][++eny];flag = 1;
            if(bex==n||eny==n)break;
            }
            cout << bex << " " << eny << endl;
            while(flag&&eny)
            {
                result[++cnt] = matrix[++bex][--eny];
                cout << bex << " " << eny << endl;
                if(bex==n||eny==n)break;
            }
            if(!eny)
            {
                result[++cnt] = matrix[++bex][eny];
                flag = 0;
                cout << bex << " " << eny << endl;
                if(bex==n||eny==n)break;
            }
            while((!flag)&&bex)
            {
               result[++cnt] = matrix[--bex][++eny];
               cout << bex << " " << eny << endl;
               if(bex==n||eny==n)break;
            }
            cout << bex << " " << eny << endl;
    }
   bex == 0? --eny:--bex;
    cout << bex << " " << eny << endl;
    // 3 0
   cnt--;
    for(int i=0; i<n-2; i++)
    {
        int flag = 0;
        if(eny==n-1)
        {
           result[++cnt] = matrix[++bex][eny];
           flag = 1;
           if(bex==n||eny==n)break;
        }
        while(flag&&(bex!=n-1))
        {
           result[++cnt] = matrix[++bex][--eny];
            if(bex==n||eny==n)break;
        }
        if(bex==n-1)
        {
           result[++cnt] = matrix[bex][++eny];
           flag = 0;
           if(bex==n||eny==n)break;
        }
        while((!flag)&&(eny!=n-1))
        {
            result[++cnt] = matrix[--bex][++eny];
            if(bex==n||eny==n)break;
        }
    }
    for(int i=0; i<n*n-1; i++)
    cout << result[i] << " " ;
    cout <<result[n*n-1] << endl;
//    }
    return 0;
}

90分,因为n=2和n=3的例子没过。立个flag,明早起来继续改~谁不改谁是猪

好了好了,虽然不会改,但是我现在找到了个好方法哈哈,不要受图上画的箭头路线的误导,其实最应该关注的是奇偶的问题。

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int matrix[550][550];
int main()
{
    int n;
    scanf("%d", &n);
    memset(matrix, 0, sizeof(matrix));
    for(int i=0; i<n; i++)
    for(int j=0; j<n; j++)
    scanf("%d", &matrix[i][j]);
    for(int i=0; i<n; i++)
    {
        if(!(i%2))//i为偶数
        {
            for(int j=0; j<=i; j++)
              cout << matrix[i-j][j] << " ";
        }
        else
            for(int j=0; j<=i; j++)
            cout << matrix[j][i-j] << " ";
    }
    for(int i=n; i<=(2*n-2); i++)
    {
        if(!(i%2))
        {
            for(int j=i-n+1; j<n; j++)
                cout << matrix[i-j][j] << " ";
        }
        else
            for(int j=i-n+1; j<n; j++)
            cout << matrix[j][i-j] << " ";
    }
    cout << endl;
    return 0;
}

********************************************************************************************
(0,0)(0,1)(0,2)(0,3)(0,4)
(1,0)(1,1)(1,2)(1,3)(1,4)
(2,0)(2,1)(2,2)(2,3)(2,4)
(3,0)(3,1)(3,2)(3,3)(3,4)
(4,0)(4,1)(4,2)(4,3)(4,4)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值