东华oj 2022 c++【函数】菱形输出

明明这次又碰到问题了:

给定一个正整数N,明明的爸爸让他输出一个以Z开始的菱形,以后依次为Y,X…,

比如当N等于1的时候输出图形:

Z

当N等于2的时候,输出图形:(Y前没有空格,Z、X和W前一个空格)

  Z

Y X

 W

当N等于3的时候,输出图形(Z前两个空格,Y、X前一个空格,W前没有空格......):

   Z

 Y X

W   V

 U T

   S

明明发现当N很大的时候就不是很容易了,所以找到了你,希望你编写一个程序帮助他

明明的问题可以归结为:输入一个正整数N,输出一个以Z开始的菱形,以后依次为Y,X…。

请尝试定义函数,该函数的功能是输出以上图形的一行。

代码:

#include<iostream>
#include<iomanip>
#include<cmath>
#include <stdio.h>
#include<string>
#include <string.h>
#include <bits/stdc++.h>
using namespace std;

char f(char a,int N1,int N2)
{
    int i;
    for(i=1;i<=N1;i++)
    {
        if(i==N1||i==N2)//遇到字符填字符,其他填空白,N1顺便当作列数
        {
            cout<<a;
            a=a-1;
        }
        else cout<<" ";
    }
    cout<<'\n';
    return a;
//这里的字符处理,本来我是放在全局变量的,但这样就不能每次循环恢复Z了,如果放在main里,每次a的处理又必须在f中,所以就设置了一个返回值a
}
int main()
{
    char a='Z';
    int N,N1,N2,i;
    while(cin>>N)
    {
       char a='Z';
       N1=N;
       N2=N;
       //这两组for循环是行的变化,分成两组也是由观察得到,N1既是列数,又是右边字符所在位置,N2是左边字符所在位置
       for(i=1;i<=N;i++
       {
           a=f(a,N1,N2);
           N1++;N2--;
       }
       N1=N1-2;//观察图形可以知道-2+2
       N2=N2+2;
       for(i=1;i<N;i++)
       {
           a=f(a,N1,N2);
           N1--;N2++;
       }
       cout<<'\n';
   }
    return 0;
}

反思:做这道题时候想起了二维数组的阵列(借鉴了其中每行处理,空格和字符分别一个个输出的思路),和比较类似的循环数组的X

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值