3 Star 60 Fork 5

programmercarl / kamacoder-solutions

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0013.镂空三角形.md 4.96 KB
一键复制 编辑 原始数据 按行查看 历史

13. 镂空三角形

题目链接

C++

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

// 分为三部分打印:根据规律
void myprint(char c, int n){
    // 第一部分:第一行
    cout << string(n- 1, ' ') << c << endl;
    
    // 第二部分:中间部分
    for(int i = n - 2, j = 1; i >= 1; i--, j += 2){
        cout << string(i, ' ') << c << string(j, ' ') << c << endl;
    }
    
    // 第三部分:最后一行
    if(n > 1)
        cout << string(n + n - 1, c) << endl;
    cout << endl;
}

int main() {
    char c;
    int n;
    while(cin >> c){
        if(c == '@')
            break;
        cin >> n;
        myprint(c, n);
    }
    return 0;
}

Java

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        while (sc.hasNext()) {
            String line = sc.nextLine();
            if (line.equals("@"))
                break;

            String[] inputs = line.split(" ");
            char ch = inputs[0].charAt(0);
            int n = Integer.parseInt(inputs[1]);

            // 输出图案
            printPattern(ch, n);
        }
        sc.close();
    }

    private static void printPattern(char ch, int n) {
        // 输出第一行
        print(' ', n - 1);
        System.out.println(ch);

        // 输出第二行到倒数第二行
        for (int i = 2; i < n; i++) {
            print(' ', n - i);
            System.out.print(ch);
            print(' ', 2 * i - 3);
            System.out.println(ch);
        }

        // 输出最后一行
        if (n > 1) {
            print(ch, 2 * n - 1);
            System.out.println();
        }

        System.out.println();
    }

    private static void print(char ch, int count) {
        while (count-- > 0) {
            System.out.print(ch);
        }
    }
}

python

while True:
    try:
        line = input()
        if line == '@':
            break
        ch, n = line.split()
        n = int(n)
        # 输出第一行
        print(' ' * (n - 1) + ch)
        # 输出第二行到倒数第二行
        for i in range(2, n):
            print(' ' * (n - i) + ch + ' ' * (2 * i - 3) + ch)
        # 输出最后一行
        if n > 1:
            print(ch * (2 * n - 1))
        print()
    except:

Go

package main

import (
	"fmt"
)

func printSpaces(numSpaces int) {
	for i := 0; i < numSpaces; i++ {
		fmt.Print(" ")
	}
}

func printAChars(numChars int, a rune) {
	for i := 0; i < numChars; i++ {
		fmt.Print(string(a))
	}
}

func main() {
	var n int
	var a rune
	for {
		_, err := fmt.Scanf("%c", &a)
		if err != nil || a == '@' {
			break
		}

		_, err = fmt.Scanf("%d", &n)
		if err != nil {
			break
		}

		if n == 1 {
			fmt.Println(string(a))
		}

		for i := 1; i <= n-1; i++ {
			// 打印空格
			printSpaces(n - i)

			// 打印字符
			if i == 1 {
				fmt.Print(string(a))
			} else {
				fmt.Print(string(a))
				printSpaces(2*i - 3)
				fmt.Print(string(a))
			}
			fmt.Println()
		}

		// 打印底边
		if n > 1 {
			printAChars(2*n-1, a)
			fmt.Println()
		}

		fmt.Println() // 每条结果下一个空行
	}
}

Js

function myprint(c, n) {
    // 第一部分:第一行
    console.log(" ".repeat(n - 1) + c);
    
    // 第二部分:中间部分
    for (let i = n - 2, j = 1; i >= 1; i--, j += 2) {
        console.log(" ".repeat(i) + c + " ".repeat(j) + c);
    }
    
    // 第三部分:最后一行
    if (n > 1) {
        console.log(c.repeat(n + n - 1));
    }
    console.log();
}

function main() {
    const readline = require('readline');
    const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
    });

    rl.on('line', (input) => {
        let [c, n] = input.split(' ');
        if (c === '@') {
            rl.close(); // 结束输入监听
            return;
        }
        myprint(c, parseInt(n));
    });
}

main();

C

#include <stdio.h>

void printSpaces(int numSpaces) {
    for (int i = 0; i < numSpaces; ++i) {
        printf(" ");
    }
}

void printAChars(int numChars, char a) {
    for (int i = 0; i < numChars; ++i) {
        printf("%c", a);
    }
}

int main() {
    int n;
    char a;
    while (scanf(" %c", &a) == 1) { // 在%c前加空格,忽略换行符
        if (a == '@') break;
        scanf("%d", &n);
        if (n == 1) printf("%c\n", a);
        else {
            // 打印第一行
            printSpaces(n-1);
            printf("%c\n", a);

            // 打印中间行
            for (int i = 2; i <= n-1; ++i) {
                printSpaces(n-i);
                printf("%c", a);
                printSpaces(2*i-3);
                printf("%c\n", a);
            }

            // 打印最后一行
            if (n > 1) printAChars(2*n-1, a);
            printf("\n");
        }
        printf("\n"); // 每条结果下一个空行
    }
    return 0;
}
1
https://gitee.com/programmercarl/kamacoder-solutions.git
git@gitee.com:programmercarl/kamacoder-solutions.git
programmercarl
kamacoder-solutions
kamacoder-solutions
main

搜索帮助