Problem Description
从键盘输入一个整数n(1≤n≤9),打印出指定的数字图形。
Input
正整数n(1≤n≤9)。
Output
指定数字图形。
Sample Input
5
Sample Output
1
121
12321
1234321
123454321
1234321
12321
121
1
/*5
Sample Output
1
121
12321
1234321
123454321
1234321
12321
121
1
*/
#include<stdio.h>
int main()
{
int n,i,j;
while((scanf("%d",&n))!=EOF)
{
for(i=1;i<2*n;i++)//i为第i行答案
{
int a=0;//每次都要将a初始化
if(i<=n)//开始分增大与缩小
{
for(j=1;j<=n+i-1;j++)//这个j是关键,每一行的长度为n+i-1;
{
if(j<=n-i)//前n-i的值都为空格
{
printf(" ");
}
if(j>n-i)//自第三个数开始从1逐渐增加直到第n个数然后自n+1个数开始减小
{
if(j<=n)//在第n个数之前的值是增加的
{
a++;//一定是先将a值增加再输出
if(j==n+i-1)//为了让第一个1也能有换行符所以这么搞
{
printf("%d\n",a);
}
else printf("%d",a);
}
else//第n+1个值开始增加,先将a减小,再输出
{
a--;
if(a>1)
{
printf("%d",a);
}
else//直到通过a判断,当a==1时说明减到底了,直接break即可
{
printf("%d\n",a);
break;
}
}
}
}
}
else //当i>n时
{
for(j=1;j<=3*n-i-1;j++)//让j从最大的n-1开始减小到1;
{
if(j<=i-n)//前i-n的值都为空格
{
printf(" ");
}
if(j>i-n)//自第i-n个数开始从1逐渐增加直到第n个数然后自n+1个数开始减小
{
if(j<=n)//在第n个数之前的值是增加的
{
a++;//一定是先将a值增加再输出
if(j==3*n-i-1)//为了让第一个1也能有换行符所以这么搞
{
printf("%d\n",a);
}
else printf("%d",a);
}
else//第n+1个值开始减小,先将a减小,再输出
{
a--;
if(a>1)
{
printf("%d",a);
}
else//直到通过a判断,当a==1时说明减到底了,直接break即可
{
printf("%d\n",a);
break;
}
}
}
}
}
}
}
return 0;
}
//这种题的点在于需要for循环和if判断的准确性,整体而言并不是很难。
整体就是先确定那些是空格,然后先令a=0,a++,再输出,否则后面a–的时候会出现问题。