来看的有没有真人啊!有的能不能评论区说句话?
题目:
No.1 P1720 月落乌啼算钱
OK,开始正文!第一题:
题目背景
(本道题目木有隐藏歌曲……不用猜了……)
《爱与愁的故事第一弹·heartache》最终章。
吃完 pizza,月落乌啼知道超出自己的预算了。为了不在爱与愁大神面前献丑,只好还是硬着头皮去算钱……
题目描述
算完钱后,月落乌啼想着:“你坑我!”于是当爱与愁大神问多少钱时,月落乌啼说了一堆乱码。爱与愁大神说:“算了算了,我只问第 n 样菜价格多少?”月落乌啼写出了:
由于爱与愁大神学过编程,于是就用 1 分钟的时间求出了 Fn 的结果。月落乌啼为此大吃一惊。你能学学爱与愁大神求出 Fn 的值吗?
输入格式
一行一个自然数 n。
输出格式
只有 1 行一个实数 Fn,保留两位小数。
输入输出样例
输入 #1
6
输出 #1
8.00
说明/提示
对于所有数据:0≤n≤48。
思路:
一开始没看到题目里有个斐波那契数列,就死算了......由于代码太丑,就不放了
后来看见了斐波那契数列,就试了一下数据:
输入:1 输出:1.00
输入:2 输出:1.00
输入:3 输出:2.00
输入:4 输出:3.00
输入:5 输出:5.00
输入:6 输出:8.00
输入:7 输出:13.00
输入:8 输出:21.00
输入:9 输出:34.00
输入:10 输出:55.00
没错,就是斐波那契数列!(第1,2项为1,其他每一项=前两项之和)
AC代码1:
#include<bits/stdc++.h>
using namespace std;
double a[50]={0,1,1};
int main()
{
for(int i=3;i<=48;i++)
{
a[i]=a[i-1]+a[i-2];
}
int n;
cin >> n;
printf("%.2lf",a[n]);
return 0;
}
温馨提示:一定要用double!至于为什么......用int会溢出,用long long也无法保留两位小数!
有人可能会好奇我为什么不用递归,其实我也用了,但是超时了......递归会重复计算很多东西,剪枝我也不会.......
OK,开始第二题:
题目描述
老师有 N 块饼干,要分给 k 名小朋友。
每名小朋友至少拿到一块饼干,老师想让每名小朋友拿到的饼干数量都不一样多,请问老师能否实现这个目标。
输入格式
本题单个测试点内有多组测试数据。
输入共 T+1 行。
输入第一行为一个整数 T,代表测试数据组数。
接下来 T 行,每行两个整数,分别为 N,k。
输出格式
输出共 T 行,依次对应 T 组测试数据。如果该组测试数据
- 可以实现,输出
Yes
。 - 无法实现,输出
No
。
输入输出样例
输入 #1
1 1 1
输出 #1
Yes
输入 #2
1 5 3
输出 #2
No
说明/提示
数据规模与约定
- 对于 50% 的测试数据 1≤k≤1000,1≤N≤10^6。
- 对于 100% 的测试数据,1≤k,N≤10^9。
思路:
如果可以实现的话,那么N最少就应该是1+2+.......+K,即(1+k)* K / 2,套公式计算即可
注意点:
1.不开long long见祖宗(K在int范围内,但是!K *(K+1)会溢出!)
2.NK弄反见祖宗
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin >> t;
while(t--)
{
long long n,k;
cin >> n >> k;
n>=k*(k+1)/2?cout<<"Yes\n":cout<<"No\n";
}
return 0;
}
这篇博客就到这里啦,我们下篇再见!(提前预告一下,我可能会再写2道题,后面会跳几道,因为我不会)
来看的有没有真人啊!有的能不能评论区说句话?