如何解决我的C代码没有以阶梯模式打印#是什么,这是来自hackerrank,我没有通过所有测试用例,但是我无法指出原因?
编写一个程序,打印出大小为n的阶梯。
我没有通过所有测试用例,也不知道我在哪里犯了错误。
这是我的代码:
void staircase(int n) {
char a[n][n];
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if((i + j) > ((n / 2) + 1)) {
a[i][j] = '#';
printf("%c",a[i][j]);
} else {
printf(" ");
}
}
printf("\n");
}
}
输入输入6
预期产量
#
##
###
####
#####
######
说明:
楼梯是右对齐的,由#个符号和空格组成,高度和宽度为n=6
。
解决方法
您不需要a
变量即可执行所需的操作。这是实现您想要的示例:
void staircase(unsigned n)
{
for (unsigned i = 0; i < n; ++i) {
for (unsigned j = 0; j < (n - i - 1); ++j)
printf(" ");
for (unsigned j = 0; j < (i + 1); ++j)
printf("#");
printf("\n");
}
}
第一个循环旨在覆盖每行,然后在其中循环处理实际的#
符号前的空格,最后使循环处理符号的显示。
问题出在状态
if((i + j) > ((n / 2) + 1))
应该是
if(j >= n - i - 1) // or if(i + j >= n - 1)
为简化此操作,我将创建一个辅助函数。另外,您甚至不需要使用VLA a[n][n]
。
void repeat_char(int x,char ch) {
for(int i=0; i < x; ++i) putchar(ch);
}
void staircase(int n) {
for(int i = 1; i <= n; ++i) {
repeat_char(n - i,' '); // or printf("%*s",n - i,"");
repeat_char(i,'#');
putchar('\n');
}
}
,
解决这个问题的方法比您尝试做的要容易得多
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
const int n = 6;
char* str = malloc(sizeof(*str)*(n + 1));
if (str == NULL) {
printf("Somthing wrong with memory!\n");
return 1;
}
memset(str,' ',n);
str[n] = '\0';
for(int i = n - 1; i > -1; i--) {
str[i] = '#';
puts(str); //or maybe printf who cares
}
free(str);
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。