首页 > 试题广场 >

X形图案

[编程题]X形图案
  • 热度指数:49364 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
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)
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;
    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)
#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 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;
    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;
    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;
    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)
#include <stdio.h>

int main() {
    int a;
    while (scanf("%d", &a) != EOF) {
        for (int i = 0; i < a; i++) {
            for (int j = 0; j < a; j++) {
                if((i == j) || (j == a - i - 1))
                {
                    printf("*");
                }else{
                    printf(" ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}
发表于 2023-03-02 09:26:11 回复(1)
挑战最长最笨方法。
#include <stdio.h>

int main() {
    int n;
    while (scanf("%d", &n) != EOF) 
    {
        int num;
        if (n % 2 == 0) 
        {
            num = (n - 2) / 2;
            for (int i = 1; i <= num; i++) 
            {
                for (int j = 1; j <= i - 1; j++)    //输出首部i-1个空格
                { 
                    printf(" ");
                }
                printf("*");
                for (int k = 1; k <=n - 2-2*(i-1);k++)     //输出中间n-2个空格
                { 
                    printf(" ");
                }
                printf("*");
                for (int j = 1; j <= i - 1; j++)       //输出尾部i-1个空格
                {
                    printf(" ");
                }
                printf("\n");
            }

            for(int count =1;count<=2;count++)
            {
                for(int l=1;l<=num;l++)
            {
                printf(" ");
            }
                printf("**");
                for(int l=1;l<=num;l++)
            {
                printf(" ");
            }
                printf("\n");
            }


            for (int i = 1; i <= num; i++) {
                for (int j = 1; j <= num - i; j++)     //第i行首部输出num-i个空格
                { 
                    printf(" ");
                }
                printf("*");
                for (int k = 1; k <= n-2-2*(num-i);k++)     //输出中间n-2-2*(num-i)个空格
                { 
                    printf(" ");
                }
                printf("*");
                 for (int j = 1; j <= num - i; j++)     //第i行尾部输出num-i个空格
                { 
                    printf(" ");
                }
                printf("\n");
            }

        }
        else
        {
            num = (n - 1) / 2;
            for (int i = 1; i <= num; i++) 
            {
                for (int j = 1; j <= i - 1; j++) 
                { //输出首部i-1个空格
                    printf(" ");
                }
                printf("*");
                for (int k = 1; k <= n - 2-2*(i-1);k++) 
                { //输出中间n-2*i个空格
                    printf(" ");
                }
                printf("*");
                for (int j = 1; j <= i - 1; j++) 
                { //输出尾部i-1个空格
                    printf(" ");
                }
                printf("\n");
            }
            for(int l=1;l<=num;l++)
            {
                printf(" ");
            }
            printf("*");
            for(int l=1;l<=num;l++)
            {
                printf(" ");
            }
            printf("\n");

            for (int i = 1; i <= num; i++) {
                for (int j = 1; j <= num - i; j++) 
                { //第i行输出首部num-i个空格
                    printf(" ");
                }
                printf("*");
                for (int k = 1; k <= n-2-2*(num-i);k++) 
                { //输出中间2*i个空格
                    printf(" ");
                }
                printf("*");
                   for (int j = 1; j <= num - i; j++) 
                { //第i行输出尾部num-i个空格
                    printf(" ");
                }
                printf("\n");
            }

        }
    }
}

发表于 2023-02-26 17:35:23 回复(2)
#include <stdio.h>
int main()
{
    int n = 0;
    while (scanf("%d",&n)!=EOF)//输入
    {
        for(int i = 0;i<n;i++)//行数
        {
            for(int j = 0;j<n;j++)//每一行
            {
                if(i == j || j == n-i-1)//x形成的关键
                    printf("*");
                else
                    printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2023-01-17 22:43:45 回复(0)
这应该是最简洁的答案吧,有人否定吗
#include <iostream>
using namespace std;

int main() {
    int a, b;
    while (cin >> a) {
        for(int i=0;i<a;i++)
        {
            for(int j=0;j<a;j++)
            {
                (i==j||i==a-1-j)?cout<<"*":cout<<" ";
            }
            cout<<endl;
        }
    }
}


发表于 2022-10-12 23:23:36 回复(0)
#include <stdio.h>
int main()
{
    int n,i,j;
     while(scanf("%d", &n) != EOF)
    {
        for(i=1; i<=n; i++)
        {
            for(j=1; j<=n; j++)
            {
                if(i == j || i+j == n+1)
                    printf("*");
                else
                    printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}
发表于 2022-08-05 15:55:49 回复(1)

问题信息

上传者:牛客309119号
难度:
128条回答 3034浏览

热门推荐

通过挑战的用户

查看代码