多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。
针对每行输入,输出用“*”组成的X形图案。
5
* * * * * * * * *
6
* * * * ** ** * * * *
//优化前 : 使用二维可变数组制作棋盘,以对角线插入*
//缺点:未对printf进行集合系统处理
#include <stdio.h>
int main() {
int a;
while (scanf("%d", &a) != EOF) {
//二维数组(棋盘)的定义
//char arr[a][a] = {' '};
char arr[a][a];
for (int i = 0; i < a; i++) {
for (int j = 0; j < a; j++) {
arr[i][j] = ' ';
}
}
//左 右边界的定义
int left = 0;
int right = a - 1;
for (int i = 0; i < a; i++) {
for (int j = 0; j < a; j++) {
if (i == j)
arr[i][j] = '*';//捺的定义
else if (i + j == a - 1)
arr[i][j] = '*';//撇的定义
}
}
for (int i = 0; i < a; i++) {
for (int j = 0; j < a; j++) {
printf("%c", arr[i][j]);
}
printf("\n");
}
}
return 0;
}
//优化后代码
int main()
{
int a;
while (scanf("%d", &a) != EOF) {
for (int i = 0; i < a; i++) {
for (int j = 0; j < a; j++) {
if (i == j || i + j == a - 1)
printf("*");
else
printf(" ");
}
printf("\n");
}
}
return 0;
} #include <stdio.h>
int main() {
int a = 0;
while (scanf("%d", &a) != EOF)
{
if (a % 2 == 0) //偶数 X
{
int i = 0;
for ( i = 0; i < a / 2; i++) //上倒空梯形
{
int j = i;
for ( j = i; j > 0; j--)
{
printf(" ");
}
printf("*");
int k = 0;
for ( k = 0; k < a - 2 *( i + 1); k++)
{
printf(" ");
}
printf("*");
printf("\n");
}
for ( i = 0; i < a / 2; i++) //下空梯形
{
int k = 0;
for ( k = a / 2 - i - 1; k > 0; k--)
{
printf(" ");
}
printf("*");
int j = 2 * i;
for ( j = 2 * i; j > 0; j--)
{
printf(" ");
}
printf("*");
printf("\n");
}
// printf("\n");
}
else //奇数 X
{
int m = 0;
for ( m = 0; m < (a + 1) / 2; m++) //上倒三角
{
int n = 0;
for (n = 0; n < m; n++)
{
printf(" ");
}
printf("*");
if (m < (a + 1) / 2 - 1)
{
int p = 0;
for (int p = a - 2 - m * 2 ; p > 0; p--)
{
printf(" ");
}
printf("*");
}
printf("\n");
}
for ( m = 0; m < a / 2; m++) //下梯形
{
int n = 0;
for (n = 0; n < a / 2 - 1 - m; n++)
{
printf(" ");
}
printf("*");
int p = 0;
for ( p = 0; p < m * 2 + 1; p++)
{
printf(" ");
}
printf("*");
printf("\n");
}
// printf("\n");
}
}
return 0;
} /*思路 可以借鉴二维数组的方式来打印 星星和空格
看成i行 j列
由题目输出示例可以看出
当i==j的时候 打印一个斜列
当i+j==n-1的时候 再打印一个斜列
*/
# 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 < i; j++) error
//这里 j<i 是错误的 因为这里要根据n的值来进行判断 而不是根据i
for(j = 0; j < n; j++)
{
//使用if判断 条件如下
//当i==j的时候 打印一个斜列
//当i+j==n-1的时候 再打印一个斜列
if (i==j||i+j==n-1)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
} public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt();
for (int i = 0; i < a; i++) {
for (int j = 0; j < a; j++) {
if (i == j || i+j == a-1){
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println();
}
}
}