CS50-与马里奥金字塔一起卡住
一直在做pset1的“马里奥金字塔”并且被关于打印“哈希”的部分卡住了,已经尝试了不同的方法但是。。。没有什么。具体而言,问题在于如何定义“hs”的值。下面是关于pset1的问题CS50-与马里奥金字塔一起卡住,c,cs50,C,Cs50,一直在做pset1的“马里奥金字塔”并且被关于打印“哈希”的部分卡住了,已经尝试了不同的方法但是。。。没有什么。具体而言,问题在于如何定义“hs”的值。下面是关于pset1的问题 #include <stdio.h> #include <cs50.h> int main(void) { int h, s, hs, i; do { h = get_int("Height: "); } while (h < 0 || h &g
#include <stdio.h>
#include <cs50.h>
int main(void)
{
int h, s, hs, i;
do {
h = get_int("Height: ");
} while (h < 0 || h > 23);
for (i = 0; i < h; i++) {
/* ignore 1 */
if (i < 1) {
printf("");
} else {
for (s = (h - i); s > 1; s--) {
/* Spaces */
printf(" ");
}
for (hs = 2; hs < h; hs++) {
/* Hashes */
printf("#");
}
/* Jump Line */
printf("\n");
}
}
}
在开始编码之前,当它看起来像一个半金字塔时,试着理解如何用铅笔解决这个问题 还有纸 特别是当你学习计算机科学课程时,更重要的是 了解基本原理,而不是编程本身。经常 你需要弄清楚这个模式。一旦你做到了,翻译它 进入一个程序要容易得多 让我们试着找出这里的模式 这就是你想要的金字塔
##
## ##
### ###
#### ####
你能观察到的第一件事是什么?我们只需要看左边
金字塔的一半,因为右半部分是相同的,只是镜像的
因此,问题变得更容易:
#|#
## --> | ##
### | ###
#### |####
我添加了|
,以明确每行的起始位置。所以对于一个4的金字塔:
- 我们需要4条线
- 每行长度相同,4个字符
- 从上到下,空格数减少,哈希数增加
底部:
- 对于第一行,我们需要4-1=3个空格和1个散列
- 对于第二行,我们需要4-2=2个空格和2个哈希
- 对于第三行,我们需要4-3=1个空格和3个散列
- 对于第四行,我们需要4-4=0个空格和4个散列
- 对于第0行,我们需要4-1-0=3个空格和0+1=1个散列
- 对于第1行,我们需要4-1-1=2个空格和1+1=2个散列
- 对于第二行,我们需要4-1-2=1个空格和2+1=3个散列
- 对于第三行,我们需要4-1-3=0个空格和3+1=4个散列
- 对于第0行,我们需要n-1-0个空格和0+1=1个散列
- 对于第1行,我们需要n-1-1个空格和1+1=2个散列
- ···
- 对于第n-1行,我们需要n-1-(n-1)个空格和(n-1)+1个散列
- 对于第i行,我们需要n-1-i空间和i+1散列
#include <stdio.h>
int main(void)
{
int n = 10, i, j;
for(i = 0; i < n; ++i)
{
// left half
for(j = 0; j < n-1-i; ++j)
printf(" ");
for(j = 0; j < i + 1; ++j)
printf("#");
// 2 spaces in the middle
printf(" ");
// right half, we swapped the order
for(j = 0; j < i + 1; ++j)
printf("#");
for(j = 0; j < n-1-i; ++j)
printf(" ");
printf("\n");
}
return 0;
}
当解决此类问题时,尝试使用此方法,选择一个
用铅笔和纸,用手解决它。做
我们已经找到了模式,并将其翻译成代码是一个简单的过程
蛋糕。注意,我们甚至看到问题可以“一分为二”,因为
对称性。现在给你一个练习:打印相同的金字塔,但要倒置。我们假设知道pset1是什么,我猜?你的问题与下面链接中的问题相关吗?(顺便说一句,如果你还需要一个单独的答案的话,这个网站可能更适合你的问题。)对不起,马里奥是不是不太舒服,这对我来说还是难以理解的,即使有(或者可能是因为)那个评论。你是在谈论这门课程的家庭作业,不是吗?如果是,请在您的问题中简要总结,作为解释,并添加此链接以供进一步参考。
// this for loop before the printf("\n");
// can be removed, not needed.
for(j = 0; j < n-1-i; ++j)
printf(" ");