解题思路:

只需要找到每一行第一个数是多少,2个数之间相差多少即可
拿N=5举例 

  1 3 6 10 15   前一个和后一个数之间相差为 2 3 4 5
  2 5 9 14        第二行为 3 4 5

  4 8 13           第三行为 4 5
  7 12              第四行为 5
  11                 第五行不加

第一列:1 2 4 7 11  每2个数之间相差依次为1 2 3 4
注意事项:
看着复杂,把上面的解题思路多看看就能看懂代码,这个代码的内存小得多,时间复杂度实际上要小于n²,但是都看成是n²
参考代码:

#include<stdio.h>

#include<string.h>

int N,i,j;

int count=1,count1=1;//count1是上一列第一个数和它的下一列第一个数的增量 

int temp=2,temp1=2,temp2;//拿N=5来说,第一行为1 3 6 10 15  temp=3-1,6-3,10-6,15-10 temp是前一个数增加的量 

//temp1为 每一列第一个数与下一个数增加的量

int main()

{

scanf("%d",&N);

for(i=0;i<N;i++)

{

temp=temp1;//进入下一行时将2个数之间的初始增量设置为temp1 

temp2=count;//把每一列的第一个数赋值给temp2 

for(int j=0;j<N-i;j++)

{

if(j==0)

printf("%d ",count);//第一个数直接输出 

else if(i!=N-1)

{

    count+=temp;//下一个数满足temp增量 

    printf("%d ",count);

    temp++;

}

else

{

printf("%d",count);//最后一个数直接输出 

return 0;

}

}

temp1++;

count=temp2;//将count变成每一行的第一个数 

if(i!=0)

count1++;//因为count1初始值为0所以i=0时count1应该为1 ,i!=0那上下行第一个数之间的增量就加1 

count+=count1;

printf("\n");

}

    return 0;

}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论