我需要以金字塔模式生成以下奇数输出。 输出会像
1
3 3
5 5 5
7 7 7 7
我写了以下代码。我应该修改哪部分?
#include<stdio.h>
int main()
{
int num,r,c;
printf("Enter structure number : ");
scanf("%d", &num);
for(r=1; r<=num; r++)
{
if(r%2 != 0){
m=1;
for(c=1; c<=m; c++)
printf("%d",r);
printf("\n");
}
}
return 0;
}
电流输出:
当前输出就像-
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
你可以写:
for(r=1; r <= num; r+=2) //we only need odd numbers
{
times = r/2 + 1; //how many times to print odd number
for(c=1; c <= times; c++)
printf("%d",r); //print one character at a time
printf("\n");
}
如果您只迭代奇数,您可能会更好地理解它。我目前正在这样做并计算需要打印该数字多少次,然后我只需打印
times
的次数即可。
这段代码中有两个错误。 m 没有在任何地方声明。 你正在运行无限循环
试试这个。
#include<stdio.h>
int main()
{
int num,r,c,m;
printf("Enter structure number : ");
scanf("%d", &num);
for(r=1; r<=num; r++)
{
if(r%2 != 0){
m=r;
for(c=1; c<=m; c++)
printf("%d",r);
printf("\n");
}
}
return 0;
}
在你的代码中,而不是
m=1;
你应该写
m= ( (r/2) + 1);
否则,您始终只会在
for
循环中迭代一次。
一些小的修改就可以了:
#include<stdio.h>
int main()
{
int num,r,c,m=0;
printf("Enter structure number : \n");
scanf("%d", &num);
for(r=1; r<=num; r++)
{
if(r%2 != 0){
m++;
for(c=1; c<=m; c++)
printf("%d ",r);
printf("\n");
}
}
return 0;
}
这是一个演示。
内部
for
循环应如下所示:
for(c=1; c <= r/2; c++)
printf("%d ",r);
想一想。你想在每一行打印一个四舍五入的数字,对吗?
喜欢:
r/2
-> 1.5 -四舍五入 -> 1 -> 打印:3
3/2
等等。
和测试
#include<stdio.h>
int main()
{
int num,r,c;
printf("Enter structure number : ");
scanf("%d", &num);
for(r=1; r<=num; r++)
{
if(r%2 != 0){
int m=r;
for(c=1; c<=m; c++)
{
if(c%2 != 0){
printf("%d ",r);
}
}
printf("\n");
}
}
return 0;
}
在第 3 行中,您应该打印 5。
在第 4 行,您应该打印 7。
………………
………………
在第
n
行,您应该打印 2*n-1。
您可以检查一下:
sh-4.3# main
Enter structure number : 9
1
3 3
5 5 5
7 7 7 7
9 9 9 9 9
#include<stdio.h>
int main()
{
int num,r,c;
printf("Enter structure number : ");
scanf("%d", &num);
for(r=1; r<=num; r++)
{
for(c=1; c<=r; c++)
printf("%d",2*r-1);
printf("\n");
}
return 0;
}
如果您想要替代数字,例如 1,3,5,7...只需将值增加
for(r=1; r<=num; r+=2) // increment by 2, work for r= 1,3,5,7...
{
for(c=1; c<=r; c+=2)// increment by 2
printf("%d",r);
printf("\n");
}
。