首页 > 试题广场 >

空心正方形图案

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

输入描述:
多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“*”的数量。


输出描述:
针对每行输入,输出用“*”组成的“空心”正方形,每个“*”后面有一个空格。
示例1

输入

4

输出

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

输入

5

输出

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

int main()
{
    int n;
    while (scanf("%d" ,&n) != EOF)
    {
        for (int i = 1; i <= n; i ++ ) printf("* ");
        puts("");
        
        
        for (int i = 1; i <= n - 2; i ++ )
        {
            printf("* ");
            for (int j = 1; j <= n - 2; j ++ ) printf("  ");           
            printf("* \n");
        }
        
        
        for (int i = 1; i <= n; i ++ ) printf("* ");
        puts("");
    }
    
}

发表于 2022-02-28 18:39:30 回复(0)
#include <iostream>
using namespace std;

int main()
{
    int n;
    while (cin >> n)
    {
        
        for (int i = 1; i <= n; ++i)
        {
            for (int j = 1; j <= n; ++j)
            {
                if (i == 1 || j == 1 || i == n || j == n)
                    cout << "* ";
                else
                    cout << "  ";
            }
            cout << endl;
        }

    }
    return 0;
}
发表于 2020-03-22 23:01:32 回复(1)
import java.util.Collections;
import java.util.Scanner;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            if (n==1){
                System.out.println("* ");
                continue;
            }
            //以下代码为str 为重复n次"* "的字符串。
            String str = Collections.nCopies(n,"* ").stream().collect(Collectors.joining());
            String temp = Collections.nCopies((n-2)*2," ").stream().collect(Collectors.joining());
            temp = "* "+ temp + "* ";
            System.out.println(str);
            for (int i = 0; i < n - 2; i++) {
                System.out.println(temp);
            }
            System.out.println(str);
        }
    }
}

发表于 2020-09-23 13:35:24 回复(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==0||j==0||i==n-1||j==n-1)
                    printf("* ");
                else
                    printf("  ");
            }
            printf("\n");
        }
    }
    
}
伟大的c语言啊,真锻炼思维,一开始我想着写个小函数,输出头和底部两部分,中间用循环,然后发现,中间空格定不下来,得讨论奇数偶数。
然后想起前面写的对角线,具体思路是把图形转化成二位数组,然后再进行坐标之间的运算。
1.这个特别简单,记住数组的开头是0,然后就行了。贼简单
发表于 2022-04-21 10:19:33 回复(0)
while True:
    try:
        n = int(input())
        for i in range(n):
            if i == 0 or i == (n-1):
                print('* '*n)
            else:
                print('* '+'  '*(n-2)+'* ')
    except:
        break

编辑于 2021-06-15 21:46:41 回复(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==0||j==0||i==n-1||j==n-1) printf("* ");
                else printf("  ");
            }
            printf("\n");
        }
    }
}

发表于 2020-04-10 22:58:26 回复(0)
#include <stdio.h>
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 == 1 || i == n)
                    printf("* ");
                else if(j == 1 || j == n)
                    printf("* ");
                else
                    printf("  ");
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2022-07-22 22:57:48 回复(0)
#include<stdio.h>
int main()
{
    int n;
    while( scanf("%d",&n) != EOF )
    {
        for( int i = 0 ; i < n ; i++)
        {
            if( i == 0 || i == n - 1 )
            {
                for( int j = 0 ; j < n ; j++ )
                {
                    printf("* ");
                }
                printf("\n");
            }
            else
            {
                for( int m = 0 ; m < 2 * n ; m++ )
                {
                    if( m == 0 || m == 2 * n - 2 ) printf("*");
                    else printf(" ");
                }
                printf("\n");
            }
        }
    }
    
    return 0;
}

发表于 2022-06-17 12:31:08 回复(0)
int main(){
    int n;
    while(scanf("%d", &n) != -1){
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                if(i > 0 && i < n - 1 && j > 0 && j < n - 1){
                    printf("  ");
                }
                else{
                    printf("* ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2021-11-22 17:52:43 回复(0)
#include <stdio.h>
int main()
{
    int n = 0;
    int i = 0;
    int space = 0;
    while(scanf("%d", &n) != EOF)
    {
        //第一行
        for(i = 0; i < n; i++)
        {
            printf("* ");
        }
        printf("\n");
        //中间
        for(i = 0; i < n-2; i ++) //行数
        {
            printf("*");
            for(space = 0; space < 2*n-3; space ++)
            {
                printf(" ");
            }
            printf("*\n");
        }
        //下边
        for(i = 0; i < n; i++)
        {
            printf("* ");
        }
        //最下边这个换行也要写的 呜呜呜···
        printf("\n");
    }
    return 0;
}

发表于 2021-11-20 22:51:04 回复(0)
//BC69 空心正方形图案
#include<stdio.h>
int main()
{
    int i, j, n;

    while (scanf("%d", &n) != EOF)
    {

        //首行:输出n次 (* )
        for (i = 0; i < n; i++)
        {
            printf("* ");
        }
        printf("\n");



        //中间行:输出n-2行
        //每行内容:0(* )   n(* )  else( )
        for (i = 0; i < (n - 2); i++)
        {
            for (j = 0; j < n; j++)
            {
                if (j == 0)
                    printf("* ");
                else if (j == n - 1)
                    printf("* ");
                else
                    printf("  ");
            }
            printf("\n");
        }


        //尾行:同首行
        for (i = 0; i < n; i++)
        {
            printf("* ");
        }
          printf("\n");
    }
    return 0;
}

发表于 2021-10-29 23:50:03 回复(1)
#include <stdio.h>
int main()
{
    int n,i,j;
    while(scanf("%d\n",&n)!= EOF)
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                if((i>0 && i<n-1)&&(j>0 && j<n-1))
                    printf("  ");
                else
                    printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2020-09-28 20:55:39 回复(0)
#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==0||i==n-1||j==0||j==n-1)
                    printf("* ");
                else
                    printf("  ");
            }
            printf("\n");
        }
    }
    return 0;
}


编辑于 2024-04-05 21:40:18 回复(0)
编辑于 2024-01-22 00:15:58 回复(0)
//i==0||i=n-1
//或j==0||j==n-1
#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==0||i==n-1)
                {
                    printf("* ");
                }
                 else if (j==0||j==n-1)
                {           
                    printf("* ");
                }
                  else
                {
                printf("  ");
                }
             } 
             printf("\n");
        }
    }
    return 0;
}

发表于 2024-01-09 19:50:40 回复(0)
#include <stdio.h>

int main()
{
int a;

while (scanf("%d ", &a) != EOF)
{
for(int i=0;i<a;i++)//i->行数
{
for(int j=0;j<a;j++)
{
if((i==0)||(i==a-1))
printf("* ");
else if((j==0)||(j==a-1))
printf("* ");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}
发表于 2023-07-28 15:02:09 回复(0)
本人写的比较多,但是是按我的思考步骤走的,如果有大佬可以优化,欢迎留言。有不懂的地方也可以留言,很乐意为你解析
/*分析
将图形分成两个部分
第一部分:全为"* "的行(有几行,就有几个"* ")
第二部分:中间有"  "的行(除第一个和第n个为"* "外,其他都为"  ")
从示例可知:第1行和第n行为全为"* "的行,其余的为带"  "的行,所以使用双分支选择语句

*/

#include <stdio.h>

int main()
{
    int i,j,n;
    while(scanf("%d",&n) != EOF)
    {
        for(i=0;i<n;i++)//控制行
        {
            //第一部分
            if(0 == i || (n-1) == i)//将第1行和第n行打印为全"* "
            {
                for(j=0;j<n;j++)//循环打印n个"* "
                {
                    printf("* ");
                }
            }
            //第二部分
            else
            {            
                for(j=0;j<n;j++)//列
                {
                    if(0 == j || j == (n-1))//控制第1列与第n列为"* "
                    {
                        printf("* ");
                    }
                    else //其余列为"  "
                    {
                        printf("  ");
                    }
                }
            }
            printf("\n");//整个换行
        }
    }
    return 0;
}
发表于 2023-02-24 10:44:44 回复(1)
#include <stdio.h>

int main(){
    int n = 0;
    while(~ scanf("%d", &n)){
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                if(i >= 1 && i <= n - 2 && j >= 1 && j <= n - 2)
                    printf("  ");
                else
                    printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2022-05-27 09:42:30 回复(0)
#include<stdio.h>
int main()
{
    int n,i,j;
    while(~scanf("%d",&n))
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                if(i>0&&(i<n-1)&&j>0&&(j<n-1))
                    printf("  ");
                else
                    printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2021-10-31 11:08:26 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            int n=sc.nextInt();
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    if(i==0||i==(n-1)||j==0||j==(n-1)){
                        System.out.print("* ");
                    }else{
                        System.out.print("  ");
                    }
                }
                System.out.println(" ");
}
        }
    }
}

发表于 2021-10-15 16:49:33 回复(0)