(1) l ← 1
(2) k ← 0
(3) for i ← 1 to n do
(4) l ← i - l
(5) if k < n do
(6) k ← i * i - 1
(7) return( k, l )
求问一下k和n有什么关系吗?比如说能不能求出k(n)=x,类似于这样有个关系式的
这个伪代码中,先只看k和n的关系,k初始值为0,在(3)进入for循环,第(5)~(6)两句,说明,只要k<n就执行k=i * i-1,所以,需要找到k与n的临界点。当n<=1的时候,代码不执行for循环,此时k就是0,所以重点研究n大于以后的数据:
(伪代码 for i ← 1 to n ,i 的范围为[1,n) )
当n<=1的时候,for循环不执行,k=0
当n>1的时候,执行for循环(i从1到n-1),
i=1时,k=0,满足k<n,执行k=i * i-1=0 ,所有n全部满足
i=2时,k=0,满足k<n,执行k=i * i-1=3,所有n全部满足
i=3时,k=3,满足k<n,执行k=i * i-1=8,所有n全部满足
i=4时,k=8,满足k<n,执行k=i * i-1=15,n=5、6、7、8时不满足,此时 i = sqrt(9)+1
i=5时,k=15,满足k<n,执行k=i *i-1=24,n=6,7,8,9,10,11,12,13,14,15时不满足,此时i=sqrt(16)+1
依次类推。。。
1<n<=4时,执行for中所有的语句,此时k=(n-1) * (n-1)-1
n>=5时,满足if执行条件的i的最大值为:sqrt(n)+1,所以此时,k=(sqrt(n)+1) * (sqrt(n)+1)-1
综合以上,k(n)就是一个分段函数:
k(n)=0, 当n<=1时
k(n)= (n-1) * (n-1)-1, 当1<n<=4时
k(n)= (sqrt(n)+1) * (sqrt(n)+1)-1, 当n>=5时
如有帮助,望采纳,谢谢。
k和n不是一个线性或者曲线关系
k是小于n的最大的一个平方数减去1
根据题意,我写了一个函数,输入n,接着求k和l的值
经过测试发现,k(n)关系为k = nl,当k = 8后即使n的值继续变化k也不在变化
即
*k = nl ,0<= n <=4
k = 8, n > 4*
测试结果即代码如下
那如果要写一个表达式要怎么写呢?
k等于离n最近的一个整数平方数-1,比如;n=5,离他最近的平方数是9,那么k就是8;
k = 0, if n = 1
k = pow((int)sqrt(n)+1, 2) - 1, if n > 1
#include <cmath>
#include <iostream>
int main() {
int n, k = 0, l = 1;
std::cin >> n;
for (int i = 1; i <= n; i++) {
l = i - 1;
if (k < n)
k = i * i - 1;
}
std::cout << "k=" << k << ",l=" << l << "\n";
int i = n > 1 ? static_cast<int>(std::sqrt(n)) + 1 : 1;
std::cout << "k=" << (i * i - 1) << "\n";
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!