睡美人

博客围绕爱意值问题展开,已知第1分钟爱意值为(1,1),后续每分钟爱意值按规则变化,爱意为n即a + b = n。介绍了求解航班至少起飞多久的算法步骤,包括定义函数、枚举计算最小值等,还给出了相应代码。

不知不觉中,我对她的爱意已经达到了 n。

是这样子的,第 1 分钟,我对她的爱意值是 (1,1)。假如当第 x 分钟时我对她的爱意值是 (a,b),那 么第 x + 1 分钟我对她的爱意值就是 (a + b,b) 或者 (a,a + b)。
在关注着她的时候,我已然忘记了时间。
现在我想知道,这时候航班已经至少起飞了多久?
爱意为 n,也就是说 a + b = n。

这道题有一点点变态,不是说难度,而是这个作者。步骤如下:

(1)定义一个函数love,若当前爱意值为(a,b) ,那么开始判断a,b大小情况:

      当a>b时,这个函数返回值为love(a-b,b)+1;

      当a<b时,这个函数返回值为love(a,b-a)+1;

(2)函数定义好后,就令i=1,不断向上枚举,计算love(i,n-i){此时i不等于n-i},直至i=n/2;

并计算一个最小值min1=min(min,love(i,n-i));

(3) min即为所求值。

代码很简洁:

#include<bits/stdc++.h>
using namespace std;
int min1=1000000000;
int love(int a,int b){
if(a==1&&b==1) return 1;
if(a==2&&b==1) return 2;
if(a==1&&b==2) return 2;
if(a-b<0) return love(a,b-a)+1;
else return love(a-b,b)+1;

}
int main(){
int n;
cin>>n;
for(int i=1;i<=n/2;++i)
if(i!=n-i){
min1=min(love(i,n-i),min1);
}
cout<<min1<<endl;
return 0;
}

差不多是这样了,本人觉得这题并不难。

 

转载于:https://www.cnblogs.com/qiuheqiuji/p/11172932.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值