首页 > 试题广场 >

金字塔图案

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

输入描述:
多组输入,一个整数(2~20),表示金字塔边的长度,即“*”的数量,,也表示输出行数。


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

输入

4

输出

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

输入

5

输出

    * 
   * * 
  * * * 
 * * * * 
* * * * *
import java.util.*;
public class Main
{
    public static void main(String [] args)
    {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
        int num = sc.nextInt();
            //控制行数
            for(int i=1;i<=num;i++){
            	//空格
            	for(int n=num-i;n>=1;n--){
            		System.out.print(String.join("", " "));
            	}
                //*号
                for(int m=1;m<=i;m++){
                	System.out.print(String.join("","*"+" "));
                }
                System.out.println();
            }
        }
    }
}

发表于 2020-09-22 15:32:38 回复(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();
            String temp = String.join("", Collections.nCopies(n+1, " "));
            for (int i = 1; i <=n; i++) {
                //输出n-i个空格" ",以及拼接字符串->在i个*中插入空格" "
                //Collections.nCopies(i, "*") 是复制i-1个*,如i=3,就是***
                //下面的String.join方法是在字符串空隙中插入指定字符串,如***,变成* * *
                System.out.println(String.join("", Collections.nCopies(n-i, " "))+
                String.join(" ", Collections.nCopies(i, "*"))+" ");
            }
        }
    }
}

编辑于 2020-07-17 21:57:10 回复(3)
#include<stdio.h>
int main()
{
    int n;
    while( scanf("%d",&n) != EOF )
    {
        for( int i = 0 ; i < n ; i++)
        {
            for( int j = i ; j < ( n - 1 ) ; j++ ) printf(" ");
            for( int m = i ; m >= 0 ; m-- ) printf("* ");
            printf("\n");
        }
    }
}

发表于 2022-06-16 12:55:59 回复(0)
和前一题比只要删个空格,,,
发表于 2022-01-22 11:40:41 回复(0)
#只要考虑*前面有几个空格就好,不需要考虑后面的空格
while True:
    try:
        num=int(input())
        for i in range(0,num):
            print(' '*(num-(i+1))+'* '*(i+1))
    except:
        break

发表于 2020-03-24 13:38:20 回复(0)
while True:
    try:
        num=int(input())
        for i in range(1,num+1):
            print(' '*(num-i)+'* '*i)
    except:
        break    

发表于 2023-01-20 10:20:35 回复(0)
用递归的方式解答问题
#include<stdio.h>
int paint(int n,int m){
    if(n<0){
        return -1;
    }
    if(n==0){
        return 0;
    }
    paint(n-1,m);//递归调用
   for(int i=0;i<m-n;i++){
       printf(" ");
   }
   for(int j=0;j<n;j++){
       printf("* ");
    }
    printf("\n");
    return 0;
}
int main(){
    int n=0;
    int m=0;
    while(scanf("%d",&n)!=EOF){
        m=n;
        paint(n,m);
    }
    return 0;


发表于 2020-12-31 02:20:25 回复(0)
代码为C语言
我的思路;
        这个代码来的比较巧合,就是将上题代码第一个嵌套for循环中打印的空格删掉一个(上一题打印两个空格,这一题打印一个),改bug的时候发现的啊哈哈。
#include <stdio.h>
#include <math.h>
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)//实现多组输入
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=0;j<n-i;j++)
            {
                printf(" ");
            }
            for(int k=n-i;k<n;k++)
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2020-12-30 14:02:16 回复(2)
#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-i-1;j++){
                printf(" ");
            }
            for(j=0;j<i+1;j++){
                printf("* ");
            }
            printf("\n");
        }
    }
}

发表于 2020-04-11 09:30:14 回复(0)
while 1:
    try:
        a=int(input())
        for i in range(1,a+1):
            print(" "*(a-i)+"* "*i)
    except:
        break

发表于 2025-02-24 09:43:17 回复(0)
#include <stdio.h>

int main() {
    int a = 0;
    while (scanf("%d", &a) != EOF) {
        for (int i = 1; i <= a; i++) {
            for (int j = i; j < a; j++) {
                printf(" ");
            }
            for (int u = 1; u <= i; u++) {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}
发表于 2024-12-02 20:15:01 回复(0)
while True:
    try:
        n = int(input())
        for i in range(1,n+1):
            temp = '* '*(i-1) +'*'
            m = 2*n-1
            
            print(f"{temp:^{n*2-1}}")
    except Exception as e:
        break

发表于 2024-09-28 18:51:26 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();

            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    if (j < n - i - 1) {
                        System.out.print(" "); //控制空格数即可
                    } else {
                        System.out.print("* ");
                    }
                }
                System.out.println();
            }

        }
        in.close();
    }
}

发表于 2024-08-13 19:41:52 回复(0)
#include<stdio.h>
int main()
{
    int n=0;
    while(scanf("%d",&n)!=EOF){
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n-i;j++)
        {
            printf(" ");
        }
        for(int z=1;z<=i;z++)
        {
            printf("* ");
        }
        printf("\n");
    }
   
}
return 0;
}
发表于 2024-07-24 23:03:58 回复(0)
#include <iostream>
#include<string>
using namespace std;

void ta1(int n) {
	for (int i = 0; i < n; i++) { cout << "* "; }
	//for (int i = n - 1-1 ; i >= 0; i--) { cout <<"*"; }
	cout << endl;
}

void sp(int n) {
	for (int i = 0; i < n; i++) cout << " ";
}

void ta(int n) {
	for (int i = 0; i < n; i++) {
		sp(n-i-1); ta1(i+1);
	}
}

int main() {
	int n;
    while(scanf("%d",&n)!=EOF){
		ta(n);
	} 
}
发表于 2024-07-19 16:16:08 回复(0)
#include <stdio.h>

int main() {
    int a;
    while (scanf("%d", &a) != EOF) 
    {
        for (int i = 0; i < a; i++)    
        {
            //a-1-i会随着i变化,当输入4时,第一行打印4-1-i格空格
            for (int j = 0; j < a-1-i; j++) //打印一个空格
                printf(" ");

            for (int j = 0; j <= i; j++) //打印*和空格
                printf("* ");
            
            printf("\n");   //换行
        }
    }
    return 0;
}

发表于 2024-06-20 16:55:35 回复(0)
#include <stdio.h>

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

    }
    return 0;
}

发表于 2024-04-26 09:08:57 回复(0)
#include <stdio.h>

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

编辑于 2024-04-05 15:17:19 回复(0)
编辑于 2024-03-29 15:55:35 回复(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 - i - 1; j++)
            {
                putchar(' ');
            }
            //输出后面的‘*’
            for (j = 0; j <= i; j++)
            {
                putchar('*');
                putchar(' ');
            }
            //换行输出下一行
            putchar('\n');
        }
    }

    return 0;
}

发表于 2024-03-19 11:07:52 回复(0)