输入一个n,输出一个菱形
例如:输入:12
输出:
思路:第一步:以中间最长的一行最为程序的分割点,将上下两个部分分为两个程序进行。
第二步:上面的部分使用for嵌套循环,在外层for循环中表示第几行数,内层第一个循环表示每行的输出空格数,第二个循环表示输出的*数。不难看出规律,空格数第i行数量为n-i。*的数量则是2i-1。最后再在外层每次循环结束后输出换行。
第三步:下面的部分也是使用for嵌套循环,在外层for循环中表示第几行数,内层第一个循环表示每行输出的空格数,第二个循环表示输出的*数。通过观察可以看出空格数等于行数。第i*的数量则是为上半部分倒数第n-i行的*量,故将n-i带入2i-1得出每行的*数量应从2(n-i)-1开始循环。最后再在外层每次循环结束后输出换行。
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n-i;j++)
{
cout<<" ";
}
for(int k=1;k<=2*i-1;k++)
{
cout<<"*";
}
cout<<""<<endl;
}
for(int i=1;i<=n-1;i++)
{
for(int j=1;j<=i;j++)
{
cout<<" ";
}
for(int k=2*(n-i)-1;k>=1;k--)
{
cout<<"*";
}
cout<<" "<<endl;
}
return 0;
}
心得体会:做这道题的时候遇到的困难主要是每行前面的空格和*数量比较难判断,,上半部分的空格数和*数量都比较容易按照顺序得出。下半部分的空格数也容易得出,主要比较难以得出的是下半部分的*数量。