明明这次又碰到问题了:
给定一个正整数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