Skip to content

Latest commit

 

History

History
90 lines (68 loc) · 2.29 KB

poj 3752 字母旋转游戏.md

File metadata and controls

90 lines (68 loc) · 2.29 KB

题目

给定两个整数M,N,生成一个M*N的矩阵,矩阵中元素取值为A至Z的26个字母中的一个,A在左上角,其余各数按顺时针方向旋转前进,依次递增放置,当超过26时又从A开始填充。例如,当M=5,N=8时,矩阵中的内容如下:

A B C D E F G H

V W X Y Z A B I

U J K L M N C J

T I H G F E D K

S R Q P O N M L

输入描述

M为行数,N为列数,其中M,N都为大于0的整数。

输出描述

分行输出相应的结果

输入例子

  • 4 9

输出例子

A B C D E F G H I

V W X Y Z A B C J

U J I H G F E D K

T S R Q P O N M L

参考答案

#include <iostream>
using namespace std;

char map[10000][10000];

int main()
{
    int i, j, m, n, tot;
    char ch = 'A';
    cin >> m >> n;

    for(i = 0; i < m; i++)
       for (j = 0; j < n; j++)
            map[i][j] = '0';

    i = j = tot = 0;
    map[i][j] = 'A';
    while (tot < n*m-1){//注意这里的判断! 
          while (j+1 < n && map[i][j+1] == '0'){
                if (ch >= 90)  ch -= 26;
                j = j + 1;
                ch = ch + 1;
                map[i][j] = ch;
                tot = tot + 1;
          }
          while (i+1 < m && map[i+1][j] == '0'){
                if (ch >= 90)  ch -= 26;
                i = i + 1;
                ch = ch + 1;
                map[i][j] = ch;
                tot = tot + 1;
          }
          while (j-1 >= 0 && map[i][j-1] == '0'){
                if (ch >= 90)  ch -= 26;
                j = j - 1;
                ch = ch + 1;
                map[i][j] = ch;
                tot = tot + 1;
          }
          while (i-1 >= 0 && map[i-1][j] == '0'){
                if (ch >= 90)  ch -= 26;
                i = i - 1;
                ch = ch + 1;
                map[i][j] = ch;
                tot = tot + 1;
          }
    }

    for (i = 0; i < m; i++){
       for (j = 0; j < n; j++)
            cout << "   " << map[i][j];
       cout << endl;
    }

}