123ml


私信TA

用户名:123ml

访问量:47

签 名:

等  级
排  名 57590
经  验 205
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 重庆工程学院
专  业

  自我简介:

TA的其他文章

解题思路:

只需要找到每一行第一个数是多少,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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区