本题多组输入,每行一个整数(2~20)。
针对每行输入,输出用“*”组成的箭形。
2
* ** *** ** *
3
* ** *** **** *** ** *
4
* ** *** **** ***** **** *** ** *
#include<stdio.h> int main() { int n; while( scanf("%d",&n) != EOF ) { for( int i = 0 ; i <= n ; i++) { for( int j = 2 * i ; j < 2 * n ; j++ ) printf(" "); for( int m = i ; m >= 0 ; m-- ) printf("*"); printf("\n"); } for( int i = 1 ; i <= n ; i++) { for( int j = 2 * i ; j > 0 ; j-- ) printf(" "); for( int m = i ; m <= n ; m++ ) printf("*"); printf("\n"); } } return 0; }
#include <iostream> using namespace std; int main() { int n; while (scanf("%d", &n) != EOF) { // int cnt = 1; for (int i = 1; i <= n; i ++ ) { for (int j = 1; j <= 2 * n + 1 - cnt; j ++ ) printf(" "); cnt += 2; for (int k = 1; k <= i; k ++ ) printf("*"); printf("\n"); } // 中间层 for (int i = 1; i <= n + 1; i ++ ) printf("*"); cnt -= 2; printf("\n"); // // for (int i = n; i >= 1; i -- ) { for (int j = 1; j <= 2 * n + 1 - cnt; j ++ ) printf(" "); cnt -= 2; for (int k = 1; k <= i; k ++ ) printf("*"); printf("\n"); } } }
#include<iostream> using namespace std; /* 分为上下两个部分找规律 上: 空格 * 空格 2(n-i) i+1 i 下: 空格 * 空格 2(n-i+1) i i-1 */ int main() { int n; while(cin>>n) { for(int i=0;i<n+1;i++) {//上半部分(上n+1行) for(int j=0;j<(2*(n-i));j++) cout<<" "; for(int j=0;j<i+1;j++) cout<<"*"; for(int j=0;j<i;j++) cout<<" "; cout<<endl; } for(int i=n;i>0;i--) {//下半部分(下n行) for(int j=0;j<(2*(n-i+1));j++) cout<<" "; for(int j=0;j<i;j++) cout<<"*"; for(int j=0;j<i-1;j++) cout<<" "; cout<<endl; } } return 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(); List<String> remember = new ArrayList<>(n); for (int i = 1; i <=n+1; i++) { String str = String.join("",Collections.nCopies((n+1-i)*2," ")); str+=String.join("",Collections.nCopies(i,"*")); remember.add(str); } boolean flag = true; for (int i=0;i>=0;){ if (i==remember.size()-1)flag=false; System.out.println(remember.get(i)); i=flag?++i:--i; } } } }
#include<bits/stdc++.h> using namespace std; int main() { int n; while(cin >> n) { n++; for(int i=1;i<=2*n-1;i++) { int spaceNum = abs(i-n); int starNum = n-spaceNum; for(int j=0;j<spaceNum*2;j++) cout << " "; for(int j=0;j<starNum;j++) cout << "*"; cout << endl; } } return 0; }
#include<stdio.h> int main() { int num; int i, j, k; while (scanf("%d", &num) != EOF) { for (i = 0; i <= num; i++) { for (j = 0; j < num - i; j++) { printf(" "); } for (k = 0; k <= i; k++) { printf("*"); } printf("\n"); } for (i = 0; i < num; i++) { for (j = 0; j <= i; j++) { printf(" "); } for (k = 0; k < num - i; k++) { printf("*"); } printf("\n"); } } return 0; }
#include <stdio.h> int main() { int z; while(scanf("%d", &z) != EOF){ /* 外层循环控制行 i, 内层循环控制列。 上半部分: z行 先输出第一行6个,第二行4个,第三行2个 空格 2z zz-2 2z-4 2z-2i+2 2z-2i+2 2z-2i+2 在输出i个"*" 中间部分z+1个* 下半部分: z行 先输出2i个 空格 在输出z-i+1个 "*" */ for(int i = 1; i <= z; i++){ for(int j = 1; j <= 2*z-2*i+2; j++){ printf(" "); } for(int k = 1; k <= i; k++){ printf("*"); } putchar(10); } for(int i = 1; i <= z+1; i++){ printf("*"); } putchar(10); for(int i = 1; i <= z; i++){ for(int j = 1; j <= 2*i; j++){ printf(" "); } for(int k = 1; k <= z-i+1; k++){ printf("*"); } putchar(10); } } return 0; }
#include <stdio.h> int main() { int n = 0; while (scanf("%d", &n) != EOF) { //打印上半和中间部分 for(int i = 0; i < n + 1; i++) { for(int j = 0; j < n - i; j++) printf(" "); for(int j = 0; j < i + 1; j++) printf("*"); printf("\n"); } //打印下半 for(int i = 0; i < n; i++) { for(int j = 0; j < i + 1 ; j++) printf(" "); for(int j = 0; j < n - i; j++) printf("*"); printf("\n"); } //此写法更加统一循环的书写风格,更易读懂吧吧吧 } return 0; }
#include <stdio.h> int main() { int input = 0; int i = 0; int j = 0; int tem = 0; //我们将箭型分为3个部分来看,分开实现 // 上部 -- 有input行 // 中部 -- 有1行 // 下部 -- 有input行 // while (scanf("%d", &input) == 1) { tem = 0; //上部 for (i = 0; i < input; i++) { for (j = 0; j < input * 2 - tem; j++)//空格每行减少2位 { printf(" "); } for (j = 0; j <= i; j++)//每行输出i个*号,但因为我们的i是从0开始数,所以使用<=i { printf("*"); } tem += 2; printf("\n"); } tem = 0; //下中部 for (i = 0; i < input + 1; i++) { for (j = 0; j < tem; j++)//空格每行增加2位 { printf(" "); } for (j = 0; j <= input - i ; j++)//*号每行减少1位,但因为i是从0开始,所以是<=i { printf("*"); } tem += 2; printf("\n"); } } return 0; }
#include <stdio.h> int main() { int n, i, j; while (scanf("%d", &n) != EOF) { n += 1; // 输出前3行 for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { if (j <= n - i) printf(" "); else printf("*"); } printf("\n"); } // 输出后2行 for (i = n-1; i >= 1; i--) { for (j = 1; j <= n; j++) { if (j > n - i) printf("*"); else printf(" "); } printf("\n"); } } return 0; }
#include<iostream> using namespace std; int main() { int n; while(cin>>n) { for(int i=0;i<n+1;i++) {//上半部分(上n+1行) for(int j=0;j<(2*(n-i));j++) cout<<" "; for(int j=0;j<i+1;j++) cout<<"*"; cout<<endl; } for(int i=n;i>0;i--) {//下半部分(下n行) for(int j=0;j<(2*(n-i+1));j++) cout<<" "; for(int j=0;j<i;j++) cout<<"*"; cout<<endl; } } return 0; }
#include<stdio.h> int main() { int n,i,j; while(~scanf("%d",&n)) { for(i=0;i<n+1;i++) { for(j=i;j<n;j++) printf(" "); for(j=0;j<=i;j++) printf("*"); printf("\n"); } for(i=0;i<n;i++) { for(j=0;j<=i;j++) printf(" "); for(j=i;j<n;j++) printf("*"); printf("\n"); } } return 0; }
while True: try: n = int(input()) for i in range(0, n + 1): temp = "*" * (i) + "*" m = 2 * (n - i) temp = " " * m + temp print(f"{temp:<{n**2+2}}") # ^居中,>居右,<居左对齐 for i in range(n-1, -1, -1): temp = "*" * (i) + "*" m = 2 * (n - i) temp = " " * m + temp print(f"{temp:<{n**2+2}}") # ^居中,>居右,<居左对齐 except Exception as e: break
#include<stdio.h> int main() { int n, i, j,k; while ((scanf("%d", &n) != EOF)) { k = 0; for (i = 0; i < 2 * (n+1); i = i + 2) { for (int j = i; j < (2 * n); j++) printf(" "); for (int m = i; m >= k; m--) printf("*"); k++; printf("\n"); } k =n+2; for (i = 2; i < 2 * (n + 1); i = i + 2) { for (int j = i; j >0; j--) printf(" "); for (int m = i; m< k; m++) printf("*"); k++; printf("\n"); } } return 0; }