本题多组输入,每行一个整数(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;
}