所以我已经分配了一个代码,它会问我“w”。输入一个数字后,它将创建一个菱形,对角线为2w。菱形必须由间隔和*组成。我现在面临的问题是,当我输入w = 5时,对角线是5而不是10 ....
main()
{
int w;
int i;
int j;
printf("w: ");
scanf("%d", &w);
printf("");
i = 0;
while (w >= i)
{
for (j = 0; j < (w - i); j++)
printf(" ");
for (j = 0; j < i + 1; j++) {
printf("*");
if (j <= i) {
printf(" ");
}
}
printf("\n");
i = i + 1;
}
i = w - 1;
while (i >= 0)
{
for (j = 0; j < (w - i); j++)
printf(" ");
for (j = 0; j < i + 1; j++) {
printf("*");
if (j <= i) {
printf(" ");
}
}
printf("\n");
i = i - 1;
}
return 0;
}
答案 0 :(得分:2)
如果添加行w = 2 *(w-1)+ 1;在任何循环之前,你得到正确数量的* s打印出来(我只是寻找你得到的模式并修改输入)
你也可以只用一个循环来解决这个问题!
编辑:
#include <stdio.h>
#include <math.h>
#define min(a, b) (((a) < (b)) ? (a) : (b))
int main(){
int input, row, column;
printf("input a number: ");
scanf("%d", &input);
printf("");
input = 2*(input-1) + 1;
int pivot = input;
int total_spaces = input*2+1;
for(row = 0; row < total_spaces; row++){
for(column = 0; column < total_spaces; column ++){
if(min(abs(total_spaces - row -1),abs(0 - row)) +
min(abs(total_spaces - column -1),abs(0 - column))
>= input && (row%2 != column %2)){
printf("*");
}
else printf(" ");
}
printf("\n");
}
}
那真是太棒了!
答案 1 :(得分:-1)
我运行了你的程序,我有这个:
/a.out
w: 5
*
* *
* * *
* * * *
* * * * *
* * * * * *
* * * * *
* * * *
* * *
* *
*
我看不到你的对角线在哪里5.你能更具体一点吗?
另外,我理解这对你来说可能并不重要,但是你的代码不能编译。
至少在主要功能之前添加int
。