我想打印下面的数字金字塔图案

  • 本文关键字:数字 金字塔 想打 打印 c
  • 更新时间 :
  • 英文 :


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");
    }
}

最新更新