首页 > 试题广场 >

X形图案

[编程题]X形图案
  • 热度指数:57994 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。

输入描述:
多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。


输出描述:

针对每行输入,输出用“*”组成的X形图案。

示例1

输入

5

输出

*   *
 * * 
  *  
 * * 
*   *
示例2

输入

6

输出

*    *
 *  * 
  **  
  **  
 *  * 
*    *
int main()
{
    int n;
    while (scanf("%d", &n) != EOF)
    {
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                if (i == j || i + j == n + 1)
                {
                    printf("*");
                }
                else
                    printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}
发表于 2025-02-12 15:20:28 回复(0)
使用 malloc 来实现类似于 VLA 的效果,用 * 对称覆盖空格
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n;
    while (scanf("%d", &n) != EOF)
    {
        for (int i = 0; i < n; i++)
        {
            char *ptr = malloc(n * sizeof(char));
            for (int j = 0; j < n; j++)
            {
                *(ptr + j) = ' ';
            }
            *(ptr + i) = '*';
            *(ptr + n - 1 - i) = '*';
            for (int k = 0; k < n; k++)
            {
                printf("%c", *(ptr + k));
            }
            printf("\n");
        }
    }
    return 0;
}
发表于 2025-01-21 09:39:24 回复(0)
#include <stdio.h>
void print_x(int n) {
    int i = 0, j = 0;
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            if (j == i || j == n - 1 - i) {
                printf("*");
            } else {
                printf(" ");
            }
        }
        printf("\n");
    }
}

int main() {
    int n = 0;
    while (scanf("%d", &n) != EOF) {
        print_x(n);
    }
    return 0;
}
发表于 2025-01-09 07:48:38 回复(0)
#include<stdio.h>
int main()
{
int n=0;
while((scanf("%d",&n))!=EOF)
{
int i=0,j=0;

for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
if(((i+j)==(n-1))||(i==j))
printf("*");
else
 printf(" ");

}
printf("\n");

}

}

    return 0;
}
发表于 2024-08-24 12:15:41 回复(0)
#include <stdio.h>

int main() {
    int a = 0;
    while (scanf("%d", &a) != EOF) 
    {
        if (a % 2 == 0)  //偶数 X
        {
            int i = 0;
            for ( i = 0; i < a / 2; i++)  //上倒空梯形
            {
                int j = i;
                for ( j = i; j > 0; j--)
                {
                    printf(" ");
                }
                printf("*");
                int k = 0;
                for ( k = 0; k < a - 2 *( i + 1); k++) 
                {
                    printf(" ");
                }
                printf("*");
                printf("\n");
            }
            for ( i = 0; i < a / 2; i++) //下空梯形
            {
                int k = 0;
                for ( k = a / 2 - i - 1; k > 0; k--)
                {
                    printf(" ");
                }
                printf("*");
                int j = 2 * i;
                for ( j = 2 * i; j > 0; j--)
                {
                    printf(" ");
                }
                printf("*");
                printf("\n");
            }
           // printf("\n");
        }
        else          //奇数 X
        {
            int m = 0;
            for ( m = 0; m < (a + 1) / 2; m++)  //上倒三角
            {
                int n = 0;
                for (n = 0; n < m; n++)
                {
                    printf(" ");
                }
                printf("*");
                if (m < (a + 1) / 2 - 1)
                {
                     int p = 0;
                    for (int p = a - 2 - m * 2 ; p > 0; p--)
                    {
                       printf(" ");
                    }
                    printf("*");
                }
                printf("\n");
            }
            for ( m = 0; m < a / 2; m++)   //下梯形
            {
                int n = 0;
                for (n = 0; n < a / 2 - 1 - m; n++)
                {
                    printf(" ");
                }
                printf("*");
                int p = 0;
                for ( p = 0; p < m * 2 + 1; p++)
                {
                    printf(" ");
                }
                printf("*");
                printf("\n");
            }
           // printf("\n");
        }
    }
    return 0;
}

发表于 2024-08-07 20:23:58 回复(1)
#include<stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
       for(int i=1;i<=n;i++)
       {
        for(int j=1;j<=n;j++)
        {
            if(j==i||j==n-i+1)
            {
                printf("*");
            }
            else
            printf(" ");
        }
        printf("\n");
       }
    }
    return 0;
}
发表于 2024-08-04 11:58:00 回复(0)
/*思路 可以借鉴二维数组的方式来打印 星星和空格
看成i行 j列 
由题目输出示例可以看出 
当i==j的时候 打印一个斜列 
当i+j==n-1的时候 再打印一个斜列
*/

# include <stdio.h>
int main ()

{
    int n = 0;
    while(scanf("%d",&n)!=EOF)
    {
        int i = 0;
        //控制行
        for(i = 0; i < n; i++)
        {
            int j = 0;
            //控制列
            //for(j = 0; j < i; j++) error 
            //这里 j<i 是错误的 因为这里要根据n的值来进行判断 而不是根据i 
            for(j = 0; j < n; j++)
            {
                //使用if判断 条件如下
                //当i==j的时候 打印一个斜列 
                //当i+j==n-1的时候 再打印一个斜列
                if (i==j||i+j==n-1) 
                {
                    printf("*");
                }
                else 
                {
                    printf(" ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2024-08-03 11:03:51 回复(0)
#include <stdio.h>

int main() {
  int b;
  while(scanf("%d",&b)!=EOF){
    int i,j;
    if(b%2==0){
      int a=b/2;
      for(i=0;i<a;i++){ //012 上三行
        for(j=0;j<i;j++) printf(" ");
        printf("*");
        for(j=0;j<(2*(a-i-1));j++) printf(" ");  //420
        printf("*\n");
        }
        for(i=0;i<a;i++){  //012 下三行
            for(j=0;j<a-1-i;j++) printf(" ");//210
            printf("*");
            for(j=0;j<2*i;j++) printf(" "); //012
            printf("*\n");
        }
      }
    else {
      int a=b/2; //5,2
      for(i=0;i<a;i++){  //上两行
         for(j=0;j<i;j++) printf(" ");  //01
         printf("*");
         for(j=0;j<(2*(a-i)-1);j++)  printf(" "); //31
         printf("*\n");
      }
      for(j=0;j<a;j++) printf(" ");
      printf("*\n");
      for(i=0;i<a;i++){//下两行 01
          for(j=0;j<a-i-1;j++)  printf(" ");//10
          printf("*");
          for(j=0;j<(2*(i+1)-1);j++) printf(" ");//13  
          printf("*\n");
    }
}
  }
    return 0
nnd就我是硬打的吗
发表于 2024-08-02 16:16:28 回复(0)
public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int a = in.nextInt();
            for (int i = 0; i < a; i++) {
                for (int j = 0; j < a; j++) {
                    if (i == j || i+j == a-1){
                        System.out.print("*");
                    }else {
                        System.out.print(" ");
                    }
                }
                System.out.println();
            }

        }
    }

发表于 2024-07-18 10:09:34 回复(0)
#include <stdio.h>
int main() {
    int n;
    while (~scanf("%d", &n)) {
        //行数
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if((i==j)||(i+j)==n-1){
                    printf("*");
                }
                else{
                    printf(" ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}
发表于 2024-07-12 10:20:05 回复(0)
/*思路 可以借鉴二维数组的方式来打印 星星和空格
看成i行 j列 
由题目输出示例可以看出 
当i==j的时候 打印一个斜列 
当i+j==n-1的时候 再打印一个斜列
*/

# include <stdio.h>
int main ()

{
    int n = 0;
    while(scanf("%d",&n)!=EOF)
    {
        int i = 0;
        //控制行
        for(i = 0; i < n; i++)
        {
            int j = 0;
            //控制列
            //for(j = 0; j < i; j++) error 
            //这里 j<i 是错误的 因为这里要根据n的值来进行判断 而不是根据i 
            for(j = 0; j < n; j++)
            {
                //使用if判断 条件如下
                //当i==j的时候 打印一个斜列 
                //当i+j==n-1的时候 再打印一个斜列
                if (i==j||i+j==n-1) 
                {
                    printf("*");
                }
                else 
                {
                    printf(" ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2024-06-02 13:59:50 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
    int n = 0;
    int i = 0;
    int j = 0;

    while (scanf("%d", &n) != EOF)
    {
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < n; j++)
            {
                //正反对角线为*,其余为空格
                if (i == j || i + j == n - 1)
                {
                    printf("*");
                }
                else
                {
                    printf(" ");
                }
            }
            printf("\n");
        }
    }

    return 0;
}

编辑于 2024-03-19 12:53:19 回复(0)
#include <stdio.h>

int main() {
    int n;
    while(scanf("%d", &n) != EOF){
        for(int y=1; y<=n; y++){
            for(int x=1; x<=n; x++){
                if(x==y){
                    printf("*");
                }else if(x==-y+n+1){
                    printf("*");
                }else{
                    printf(" ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}
发表于 2024-01-29 20:17:07 回复(0)
#include<stdio.h>
int main()
{
    int row = 0;
    while(scanf("%d",&row)!=EOF)
     {
            for (int i = 0; i < row; i++)
        {
                for (int j = 0; j < row ; j++)
                {
                    if (j == i || j + i == row-1)
                        {
                            printf("*");
                        }
                    else
                        {
                            printf(" ");
                        }
                }
            printf("\n");
        }
    }
	
}

编辑于 2024-01-24 11:58:47 回复(0)
int main()
{
	int a = 0;
	printf("请输入你要打印x的值:");
	scanf("%d",&a);
	for (int i = 0; i < a; i++)//行
	{
		//列
		for (int j = 0; j < a; j++)
		{
			if (i + j == a - 1 || i == j)
			{
				printf("*");
			}
			else
			{
				printf(" ");
			}
		}
		printf("\n");
	}
	return 0;
}

发表于 2023-12-12 10:54:22 回复(0)
#include <stdio.h>

int main()
{
    int input = 0;
    while (scanf("%d", &input) != EOF)
    {
        for(int i=0;i<input;i++)//i为行
        {
            for(int j=0;j<input;j++)//j为列
            {
                char a = ' ';
               if(i==j || i+j==input-1)
               {
                a='*';
               }
               printf("%c",a);

            }
            printf("\n");
        }

    }
    return 0;
}
编辑于 2023-12-02 14:59:41 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int n = 0;
    while (scanf("%d", &n) != -1)
    {
        for (int i = 0; i < n / 2; i++)
        {
            int a = i;
            while (a)
            {
                printf(" ");
                a--;
            }
            printf("*");
            int c = n - 2 - 2 * i;
            while (c > 0)
            {
                printf(" ");
                c--;
            }
            printf("*\n");
        }
        if (n % 2 == 1)
        {
            int o = n / 2;
            while (o)
            {
                printf(" ");
                o--;
            }
            printf("*\n");
        }
        for (int i = n / 2; i > 0; i--)
        {
            int a = i - 1;
            while (a > 0)
            {
                printf(" ");
                a--;
            }
            printf("*");
            int c = n - 2 - 2 * (i - 1);
            while (c > 0)
            {
                printf(" ");
                c--;
            }
            printf("*\n");
        }
    }
    return 0;
}
发表于 2023-12-02 13:34:19 回复(0)
#include <stdio.h>
int main()
{
    int n;
    while(scanf("%d",&n) !=EOF)
    {
        int i;//控制行
        for(i=1;i<=n;i++)
        {
            int j;//控制列
            for(j=1;j<=n;j++)
            {
                if(i == j||j == n+1-i)//*所在的位置,只有这两种情况
                {
                    printf("*");
                }
                else {
                printf(" ");//中间补空格
                }
            }
            printf("\n");//打印完一行之后进行换行
        }
    }
    return 0;
}

发表于 2023-11-05 09:42:31 回复(0)