我刚开始进行CS50课程,但是遇到第一份问题单时遇到了麻烦。目的是产生正确对齐的步骤(在完成关卡并跳到旗杆之前在Mario中使用的步骤)。
我编写的代码产生了步骤,但并没有正确对齐。
但是为什么我的代码会产生这些步骤?因为第二个for循环执行时i = j,所以第二个for循环的条件不应该总是为false吗?
很抱歉,如果以前已经回答过,但是我在表达问题时遇到了困难。
#include <stdio.h>
#include <cs50.h>
int main(){
int height = get_int("How tall are the pyramids: ");
for (int i = 0; i < height; i++){
printf("##");
for (int j = 0; j < i; j++){
printf("#");
}
printf("\n");
}
}
答案 0 :(得分:2)
好尝试;但是,您需要在执行步骤之前打印一系列空格以产生右对齐。由于这些空间是不可见的(对于左对齐的三角形是不必要的),这不一定是显而易见的。
要打印的空格数的公式为height - row_number - 1
,而要打印的步骤字符数的公式为row_number + 1
(或column_number <= row_number
)。我建议尝试这些数字并尝试产生不同的模式,这将有助于您的理解。 -1
/ +1
额外的偏移量是为了避免在三角形上方打印空白行。
要回答有关第二个循环终止条件的问题,只有在您打印出的行数少于行号的情况下,它才会为假,而第一个循环是相反的。
#include <stdio.h>
#include <cs50.h>
int main() {
int height = get_int("How tall are the pyramids: ");
for (int i = 0; i < height; i++) {
for (int j = 0; j < height - i - 1; j++) {
printf(" ");
}
for (int j = 0; j <= i; j++) {
printf("#");
}
printf("\n");
}
}
输出(高度= 10):
#
##
###
####
#####
######
#######
########
#########
##########
答案 1 :(得分:0)
使用GCC 6.3将其复制并粘贴到codechef.com/ide中。有一些示例性的pryamids,左右中间都上下颠倒,而右边向上。为了回答您的特定问题,在第二个(嵌套)循环中将j分配为0,因此在循环开始时j不等于i。
#include <stdio.h>
int main(){
int height = 10;//get_int("How tall are the pyramids: ");
printf("regular left justified\n");
for (int i = 0; i < height; i++){
printf("##");
for (int j = 0; j < i; j++){
printf("#");
}
printf("\n");
}
printf("Upside down left justified\n");
for (int i = height; i >0 ; i--){
printf("##");
for (int j = 0; j < i; j++){
printf("#");
}
printf("\n");
}
printf("upside down centered pryamid\n");
for (int i = 0; i < height; i++){
//printf("##");
for (int j = 0; j < i; j++){
printf(" ");
}
for( int j=i; j<height; j++){
printf("##");
}
printf("\n");
}
printf("regular centered pryamid\n");
for (int i = 0; i < height; i++){
//printf("##");
for (int j = height; j > i; j--){
printf(" ");
}
for( int j=height; j>=height-i; j--){
printf("##");
}
printf("\n");
}
printf("regular right justified\n");
for (int i = 0; i < height; i++){
//printf("##");
for (int j = height; j > i; j--){
printf(" ");
}
for( int j=height; j>=height-i; j--){
printf("#");
}
printf("\n");
}
printf("upside down right justified\n");
for (int i = 0; i < height; i++){
//printf("##");
for( int j=height; j>=height-i; j--){
printf(" ");
}
for (int j = height; j > i; j--){
printf("#");
}
printf("\n");
}
}