这是我要问的第一个问题。
所以这只是一个编码问题,给出了(n,m),你必须 打印锯齿形图案。
该程序相当简单,但是我在理解字符串和字符数组时遇到了问题。我不明白发生了什么,为什么程序输出的值超出了m
例如。
Input: 9 9
Output:
#########
........#
#########
#........
#########
........#
#########
#........
#########
//(☞゚ヮ゚)☞NOTSOAWESOME
#include<stdio.h>
#include<string.h>
int main()
{
int n,m,i;
scanf("%d %d",&n,&m);
char snake[m],right[m],left[m];
for(i=0;i<m;i++)
{
snake[i]='#';
right[i]='.';
left[i]='.';
}
left[0]='#';
right[m-1]='#';
for(i=0;i<n;i++)
{
if(i%2==0)printf("%s\n",snake);
else if((i-1)%4==0)printf("%s\n",right);
else if((i-3)%4==0)printf("%s\n",left);
}
}
My output for the above Input is,
#########@
........#g�@�
#########@
#........�Q�
#########@
........#g�@�
#########@
#........�Q�
#########@
答案 0 :(得分:1)
我避免这样做,因为那样会导致嵌套循环和混乱。
我同意这需要一个内部循环,但确实可以节省空间,这对这个特定问题可能并不重要,但在其他情况下可能会如此。
下面尝试了一种经过部分测试的解决方案,以避免额外的存储空间。
#include <stdio.h>
enum LINE_STATE {
LEFT = 0,
RIGHT,
SNAKE,
MAX_STATE,
};
int main()
{
int n, m, i, j;
enum LINE_STATE s = SNAKE, prev = RIGHT;
scanf("%d %d",&n,&m);
for (i = 1; i <= n; i++) {
printf("%c", (s == SNAKE || s == LEFT) ? '#' : '.');
for (j = 1; j < m - 1; j++)
printf("%c", s == SNAKE ? '#' : '.');
printf("%c\n", (s == SNAKE || s == RIGHT) ? '#' : '.');
if (i % 2) {
s = (prev + 1) % 2; // next line is even-numbered, alternate between LEFT and RIGHT
} else {
prev = s;
s = SNAKE; // next line is an odd-numbered, only SNAKE
}
}
}