输入一个非负整数得到下三角矩阵的行列号

一个下三角矩阵第一行有一个数,第二行有两个数,第三行有三个数,如此类推,第n行有n个数。
1
2 3
4 5 6
7 8 9 10
。。。。。。。
输入1,会得到(1,1)
输入2,会得到(2,1)
输入8,会得到(4,2)

故输入正整数x,得到行列号(i,j)
假设在i前面有i行(有点绕口),属于第j列
满足条件:
1)1+2+。。。+i+j=x
2) j<=i+1
3)i>0;j>0
联合1)2)得 1+2+。。。+i+(i+1)>=x
上式即(i+2)*(i+1)/2>=x
=> i^2+3i+2*(1-x)>=0
令上式取等号,及由3)得
i=(-3+sqrt(3^2 - 4*2(1-x)))/2
=(-3+sqrt(8x+1))/2
由于是>=x ,故i向上取整
j=x-(i+1)*i/2
检验上述结论的正确性
输入8,得
i = (-3+sqrt(65))/2)向上取整
故i=ceil((8.06-3)/2)=3
j=8-4*3/2=2
8位置前面有3行,8位置的(i,j)=(4,2)
结果正确

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值