解题思路:
只需要找到每一行第一个数是多少,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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复