本题多组输入,每行一个整数(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;
} #include <iostream>
using namespace std;
int main() {
int n;
while (cin >> n) {
for(int i=n;i>=1;i--){
for(int j=i;j>0;j--){
cout<<" ";
}
for(int k=n-i+1;k>0;--k){
cout<<'*';
}
cout<<endl;
}
for(int i=0;i<n+1;++i)cout<<'*';
cout<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
cout<<" ";
}
for(int k =n+1-i;k>0;k--){
cout<<'*';
}
cout<<endl;
}
}
}
// 64 位输出请用 printf("%lld")