本题多组输入,每行一个整数(2~20)。
针对每行输入,输出用“*”组成的箭形。
2
* ** *** ** *
3
* ** *** **** *** ** *
4
* ** *** **** ***** **** *** ** *
#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; }
int main() { int n = 0; while (scanf("%d", &n) == 1) { for (int i = 0; i < n; i++) { for (int j = 0; j < n - i; j++) { printf(" "); } for (int j = 0; j <= i; j++) { printf("*"); } printf("\n"); } for (int i = 0; i < n + 1; i++) { for (int j = 0; j < i; j++) { printf(" "); } for (int j = 0; j < n + 1 - i; j++) { printf("*"); } printf("\n"); } } 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; }
#define _CRT_SECURE_NO_WARNINGS /* 思路 : 也可以分为上下两部分 上面n行 下面n+1行 由空格和星号组成 两个控制 一个控制打印每行星号一个控制打印空格 */ # 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; //打印空格 //分析 上半部分的 空格 与n是双倍关系 //例如输入3 第一行是 6 个空格 第二行 4个空格 第三行 2个空格 //for (j = 0; j < n * 2 - 2; j++) error //上面的代码 n*2-2 是不对的 空格数没有随着变化 所以改成 //因为由题目可知 //当i为0的时候 正好是6 个空格 i为1的时候 为4个空格 //...... for(j = 0; j < n*2-2*i;j++) { printf(" "); } for (j = 0; j <= i; j++) { printf("*"); } printf("\n"); } for (i = 0; i < n + 1; i++) { int j = 0; //控制空格 //例如输入 3 //空格数从 0 2 4 6 以此累积 //从上半部分可以看出 与i有关 2倍的关系 //for (j = 0; j < n + 2 * i; j++) error //for (j = 0; j < n - 2 * i; j++) error //上面两个代码是错误的 //原因是因为不能出现 n 因为一出现n的话 n是用户输入的数值 //就代表有数值,也有空格数了 当 i为0的时候 正好打印4个星星 //i为1的时候打印 三个星星 //空格数从 0 2 4 6 以此累积 for (j = 0; j < 2 * i; j++)//正确 { printf(" "); } //假如输入 3 //这里的for循环 中 n+1-i 它的第一行星星数 4 3 2 1 //因为 以此递减的 而减去 i 正好 for (j = 0; j < n + 1 - i; j++) { printf("*"); } printf("\n"); } } return 0; }
#include <stdio.h> //这次分三个部分,上中下 int main() { int a; while (scanf("%d", &a) != EOF) { getchar(); //上半部分 for(int i=1;i<=a;i++) { for(int j=1;j<=a+1-i;j++) { printf(" "); } for(int k=1;k<=i;k++) { printf("*"); } printf("\n"); } //中部 for(int d=1;d<=a+1;d++) { printf("*"); } printf("\n"); //下部 for(int x=1;x<=a;x++) { for(int y=1;y<=x;y++) { printf(" "); } for(int z=1;z<=a+1-x;z++) { printf("*"); } printf("\n"); } } return 0; }
#include <stdio.h> int main(){ int n = 0; int space = 0;//打印 的次数 int k = 0;//打印*的次数 while(scanf("%d",&n) == 1){ for(int i = 0; i <= n * 2; i++){//共打印n * 2 + 1次 space = i < n + 1 ? n - i : i - n; /* if(i < n + 1){ space = n - i; } else{ space = i - n } */ if (i < n + 1){ k = i + 1; }else{ k--; } while(space--){ printf(" "); } for(int j = 0; j < k; 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 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> #include "math.h" int main() { int n; while (scanf("%d", &n) != EOF) { //打印上半部(不包括最后一行); for (int i = 0; i < n ; i++) { for (int j = 0; j < 2 * n + 1; j++) { if (j >= 2 * (n - i) && j <= 2 * (n - i) + i) { //每行*号个数i+1; printf("*"); } else { printf(" "); } } printf("\n"); } //打印下半部分(完整) for (int i = 0; i < n + 1; i++) { for (int j = 0; j < 2 * n + 1; j++) { if (j >= 2 * i && j <= 2 * i + (n - i)) { //每行*号个数n+1-i; printf("*"); } else { printf(" "); } } printf("\n"); } } return 0; }