首页 > 试题广场 >

X形图案

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

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


输出描述:

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

示例1

输入

5

输出

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

输入

6

输出

*    *
 *  * 
  **  
  **  
 *  * 
*    *
#include<iostream>
using namespace std;

int main()
{
    int n;
    while(cin>>n)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {//主对角线和副对角线打印*其余位置打印空格
                if(i==j||i==n-j-1)
                    cout<<"*";
                else
                    cout<<" ";
            }
            cout<<endl;
        }
        
    }
    return 0;
}

发表于 2020-07-24 23:38:40 回复(0)
class Solution :
    def __init__(self,n) :
        self.n = n 
        self.O = []
        self.k = False
    def output(self) :
        self.O = [' ' for i in range(n)]
        self.O[0],self.O[n - 1] = '*','*'
        try :
            for j in range(self.n) :
                print(''.join(self.O))
                if self.k :
                    self.O[self.n - j] = '*'
                    self.k = False
                self.O[j + 1],self.O[j] = self.O[j],self.O[j + 1]
                if j + 1 == int(self.n / 2) and self.n % 2 != 0 :
                    self.O[self.n - j - 1] = ' '
                    self.k = True
                    continue
                self.O[self.n - j -1],self.O[self.n - j - 2] = self.O[self.n - j - 2],self.O[self.n - j -1]
        except :
            return
while True :
    try :
        n = int(input())
        s = Solution(n)
        s.output()
    except :
        break

发表于 2020-07-24 14:23:34 回复(0)
#include <cstdio>
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||j==n-i-1)//对角线与逆对角线
                    printf("*");
                else
                    printf(" ");//其余
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2020-03-26 15:36:04 回复(0)
#include <stdio.h>
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF){
        int i,j;
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                if(i==j||i+j==n-1){
                    printf("*");
                }else{
                    printf(" ");
                }
            }
            printf("\n");
        }
    }
}

发表于 2020-04-11 08:58:09 回复(0)
import java.util.Collections;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            boolean flag = true;
            String str = String.join("",Collections.nCopies(n," "));
            for (int i = 0; i < n; i++) {
                char[] temp = str.toCharArray();
                temp[i] = '*';
                temp[n-i-1] = '*';
                System.out.println(new String(temp));
            }
        }
    }
}

发表于 2020-09-22 20:21:55 回复(0)
#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<n;j++)
            {
                if(i==j||i+j==(n-1))
                    printf("*");
                else
                    printf(" ");
                
            }
            printf("\n");
            
        }
        
        
    }
    
    
    return 0;
}
发表于 2021-09-09 12:17:49 回复(0)
#include<stdio.h>
int main()
{
    int n;
    while( scanf("%d",&n) != EOF )
    {
        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;
}

发表于 2022-06-17 10:50:49 回复(0)
#include <stdio.h>
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        for(int a=0,b=n-1;a<n,b>=0;a++,b--)
        {
            for(int j=0;j<n;j++)
            {
                if(j==a||j==b)
                {
                    printf("*");
                }
                else
                {
                    printf(" ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}
发表于 2021-08-17 18:17:50 回复(1)
while True:
    try:
        n = int(input())
        for i in range(n):
            for j in range(n):
                if i == j or (i+j) == (n-1):
                    print('*',end='')
                else:
                    print(' ',end='')
            print('')
    except:
        break
        
        

编辑于 2021-06-15 21:41:57 回复(0)
#include<stdio.h>
int main()
{
    int n;
    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||j==n-i-1)
              {
                  printf("*");
              }
             
              else
                  printf(" ");

          }
          printf("\n");
      }
     
    }
  return 0;
}

发表于 2022-05-18 20:55:16 回复(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 (j == i || j == n - i - 1)  
                    printf("*");  // 对角线和逆对角线

                else
                    printf(" ");  // 其余
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2022-02-04 22:59:55 回复(0)
#include<stdio.h>
int main()
{
    int i, j, k, n;

    while (scanf("%d", &n) != EOF)
    {
        for (i = 0; i < n; i++)
        {
            k = (n - i) - 1;        //(n-i):与i相反
            for (j = 0; j < n; j++)
            {
                if (j == i)
                    printf("*");
                else if (j == k)
                    printf("*");
                else
                    printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2021-10-29 23:14:33 回复(0)
#include<stdio.h>

int main()
{
    int n=0;
    int i = 0 , j = 0;
    while((scanf("%d",&n)!=EOF))
   {
        for(i = 0 ; i<n ;i++)
        {
            if(i<n/2)
            {
                for(j = 0 ; j < i ;j++)
                {
                    printf(" ");
                }
                printf("*");
                for(j = 0 ; j < n -2-2*i;j++)
                {
                    printf(" ");
                }
                printf("*");
            }
            else
            {
                if(i == n/2&&n%2!=0)
                {  
                    for(j = 0 ; j<n/2;j++)
                    {
                        printf(" ");
                    }
                    printf("*\n");
                }
                if(n%2==0)
                {  
                    for(j = n - 4 -i +3; j>0;j--)
                    {
                        printf(" ");
                    }
                    printf("*");
                    for(j = 0 ; j<2*(i-n/2);j++)
                    {
                        printf(" ");
                    }
                    printf("*");
                }
            else
            {
                if(i == n/2)
                    continue;
                for(j = 0 ; j<n-i-1;j++)
                {
                    printf(" ");
                }
                printf("*");
                for(j = 0 ; j< 2*(i - n/2)-1;j++)
                {
                    printf(" ");
                }
                printf("*");
            }
               
            }
            printf("\n");
        }
   }
    return 0;
}
发表于 2024-11-09 19:00:00 回复(0)
import java.util.Scanner;

public class printX {
    public static void main(String[] args) {
        // 创建一个 Scanner 对象,用于读取用户输入
        Scanner in = new Scanner(System.in);
        
        // 使用 hasNextInt() 来判断是否有整数输入,多组输入
        while (in.hasNextInt()) { 
            // 读取输入的行数 row
            int row = in.nextInt();
            
            // 外层循环控制行数 i,从 0 到 row-1
            for (int i = 0; i < row; i++) {
                // 内层循环控制列数 j,从 0 到 row-1
                for (int j = 0; j < row; j++) {
                    // 如果当前行和列相等,则打印反斜线部分 "*"
                    if (i == j || i + j == row - 1) {
                        System.out.print("*");
                    } else {
                        // 否则打印空格
                        System.out.print(" ");
                    }
                }
                // 每打印完一行需要换行
                System.out.println();
            }
        }
    }
}


发表于 2024-09-19 15:18:57 回复(0)
#include <stdio.h>


int main()
{
    int n = 0;
    while ((scanf("%d", &n)) != EOF) 
    {
        int arr[] = { 0 };
        int i = 0;
        for (i = 0; i < n; i++)
        {
            arr[i] = '*';
        }
        int left = 0;
        int right = n - 1;
        while (right != -1)
        {
            for (i = 0; i < n; i++)
            {
                if (i != left && i != right)
                {
                    printf(" ");
                }
                else
                {
                    printf("%c", arr[i]);
                }
            }
            printf("\n");
            left++;
            right--;
        }
    }
    return 0;
}

发表于 2024-07-29 11:02:24 回复(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)
    {
        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)
#include <math.h>
#include <stdio.h>

int main() {
    int i = 0;
    int j = 0;
    int n=0;
    int arr1[20];
    while(scanf("%d",&n)!=EOF)
    {
    
    int left = 0;
    int right = n - 1;
        for (i = 0; i <= n - 1; i++)//将代码全部赋值为空格
        {
            
            arr1[i] = ' ';
        }
        while (left <= right)//当left <= right时是代码的上半部分
        {
            arr1[left] = '*';
            arr1[right] = '*';
            for (j = 0; j <= n-1; j++)
            {
                printf("%s", &arr1[j]);
            }
            printf("\n");
            arr1[left] = ' ';//重新蒋数组赋值为空格
            arr1[right] = ' ';
            left++;
            right--;
        }
        while (0 <= left && right <= n - 1)
        {
            while (left >= right)
            {
                left--;
                right++;
            }
            arr1[left] = '*';
            arr1[right] = '*';
            for (j = 0; j <= n - 1; j++)
            {
                printf("%s", &arr1[j]);
            }
            printf("\n");
            arr1[left] = ' ';
            arr1[right] = ' ';
            left--;
            right++;
        }
    }
    printf("\n");
    return 0;
}
发表于 2023-10-26 19:53:16 回复(0)
#include <iostream>
using namespace std;

int main() {
    int n;
    while (scanf("%d",&n) != EOF) { // 注意 while 处理多个 case
        for(int a=0;a<n;a++){
            for(int b=0;b<n;b++){
                if(a==b || a+b == n-1){  //正斜线[a][a]处是*,反斜线[a][n-i-b]处是*
                    printf("*");
                }
                else printf(" ");
            }
            printf("\n");
        }
    }
}

发表于 2023-10-08 18:23:10 回复(0)