1
2 4
3 5 7
6 8 10 12
9 11 13 15 17
以下是我无法打印金字塔的代码:-
int main()
{
int i,j;
for(i=1;i<=5;i++){
for(j=1;j<=i;j++){
printf("%d ",i*j);
}
printf("n");
}
return 0;
}
您需要同时跟踪偶数和奇数。
#include <stdio.h>
int main()
{
int even=1,odd=2;
int n=10;
for (int i = 1; i <= n; i++)
{
int a= (i % 2 == 0);
for (int j = 1; j < i; j++)
{
if(a)
{
printf("%d ",even);
}
else
{
printf("%d ",odd);
}
even += a ? 2 : 0;
odd += a ? 0 : 2;
}
printf("n");
}
return 0;
}
不是很干净和紧凑的算法,但像这样的算法可以工作:
#include <stdio.h>
#include <stdlib.h>
int main() {
char tmp[10];
int n = 0, row = 1, odd = 1, even = 2, c = 0, selectOdd, fin = 0;
printf("maximum number: ");
scanf("%s", tmp);
n = atoi(tmp);
if (n != 0) {
while (fin < 2) {
selectOdd = row % 2;
c = row;
if (selectOdd) {
while (c != 0) {
printf("%3d", odd);
odd += 2;
if (odd > n) {
fin++;
break;
}
c--;
}
}
else {
while (c != 0) {
printf("%3d", even);
even += 2;
if (even > n) {
fin++;
break;
}
c--;
}
}
printf("n");
row++;
}
}
return 0;
}
这是一个简单的
你的算法是奇数、偶数、奇数,。。。等等
所以你从奇数开始直到到达行号下一行是偶数,你可以用这个找到起始号码
你只需要在行首找到号码,然后继续打印号码在每一步中,你只需要
num += 2;
记住"lineIndex"从1 开始
num = (lineIndex - 1) * 2 + lineIndex % 2;
这是一个完整的代码
#include <stdio.h>
int main(){
int numIndex;
int lineIndex;
int num;
for (lineIndex = 1; lineIndex <= 5; lineIndex++) {
num = (lineIndex - 1) * 2 + lineIndex % 2;
for (numIndex = 0; numIndex < lineIndex; numIndex++) {
printf("%2d ", num);
num += 2;
}
printf("n");
}
}