输入描述
多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。
输出描述
针对每行输入,输出用“*”组成的X形图案。
示例
输入:5
输出:* *
* *
*
* *
* *
思路:要看哪种情况需要打印“*”,哪种情况需要打印空格,先创建i和j2个变量,来表示行和列,主对角线很好知道,当i和j相等的时候需要打印“*”,但是副对角线的时候就需要想一想了,满足哪种式子就会打印*,当i+j=n-1时就需要打印了。s
代码实现
#include <stdio.h>
int main()
{
int n=0;
while(scanf("%d",&n)!=EOF)
{
int i=0;//控制行
for(i=0;i<n;i++)
{
int j=0;//控制列
for(j=0;j<n;j++)
{
if(i==j||i+j==n-1)//i==j时是正斜线,i+j==n-1时是反斜线,这2种都需要打印*
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");//打印完一行进行换行
}
}
return 0;
}
题目链接:X形图案_牛客题霸_牛客网
还有一个类似的题目就是打印空心正方形图案
输入描述:多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“*”的数量。
输出描述:针对每行输入,输出用“*”组成的“空心”正方形,每个“*”后面有一个空格。
思路:为了更好的说明,我用i表示行,j表示列,“o”表示空格,因为题目要求是每个“*”后面有一个空格,所以我把“*o”放在一个表格里,通过观察得出当i==0和j==0时需要打印*o,这样第0行和第0列就打印完了,然后就剩下第3行和第3列了,这个时候就是当i==n-1和j==n-1时需要打印。
注意:我当时写的时候首先没注意打印完*后需要加空格,所以提交结果的时候不通过,还有就是不要以为“*”占一个小方格,空格占一个小方格,这样就相当于“*”和“o”总共占了2个位置,要看成一个整体放在一个位置中。(1,1)(1,2)(2,1)(1,2)这4个位置,每个小位置里面是2个空格,就相当于把“*”换成“o”,打印的时候是“oo”。
代码实现
#include <stdio.h>
int main()
{
int n=0;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==0||i==n-1||j==0||j==n-1)
printf("* ");
else
printf(" ");//2个空格
}
printf("\n");
}
}
}
题目链接:空心正方形图案_牛客题霸_牛客网
我感觉我写的不是很好,如果有更好的方法欢迎分享,有错误的话希望提出了,我会及时改正,谢谢阅读