放大的X

问题描述 :

请你编程画一个放大的’X’。

如2*2的’X’应如下所示:

XX

XX

5*5的’X’如下所示:

X   X

 X X

  X

 X X

X   X

输入说明 :

输入数据第一行是一个整数T,表示有T组测试数据;

接下来有T行,每行有一个正数n(2 <= n <= 80),表示放大的规格。

 

输出说明 :

对于每一个n打印一个规格为n * n放大的’X’;每组输出后面空一行。

注意:每一行输出的字符X为大写的'X',第一行的最前与最后都无空格,每行的最后都无空格。

 

这道题目就是一道数学规律题目,仔细判断后可以看出来只有当j==k||j+k==n-1满足时才打印“X”。

for循环两层遍历即可。

特别注意:题目要求每行的最后都无空格,我的思路是统计每行已经打印的X的个数,如果已经打印两个了,或者该行已经打印一个了(马上就换行),

那么执行换行操作,该行不在打印。

 

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>


int main(){

    int t,n;
    scanf("%d",&t);
    int i,j,k;
    int num;    //记录该行打印了几个X?
    for(i=0;i<t;i++){
        scanf("%d",&n);
        for(j=0;j<n;j++){
            num = 0;    //默认该行没有打印X
            for(k=0;k<n;k++){
                if(j==k||j+k==n-1){
                    printf("X");
                    num++;
                    if(j==n/2&&k==n/2){//有一种特殊情况
                        num = 2;
                    }
                }else{
                    if(num!=2){    //每行的最后都无空格
                        printf(" ");
                    }
                    
                }
            }
            printf("\n");
        }
        printf("\n");
    }

    return 0;
}

 

posted @ 2020-02-28 23:23  focusDing  阅读(635)  评论(0编辑  收藏  举报