一道值得思考的数学题。
计算可知,做一块披萨的时间是 2.5 分钟,这在 3 个购买方案中一致。故此只需考虑怎样用 6 8 10
3 个数字组合出大于等于 \(n\) 且最小的数。
可以证明,这 3 个数可以组合成不小于 6 的所有偶数。证明如下:
对于不小于 6 的任意偶数 \(n\),它都可以被表示为 \(6 \times a + b\) 的形式,其中 \(a \in \mathbb{N}\) 且 \(b \in \{0,2,4\}\)。
当 \(b=0\) 时,\(n\) 能被 6 整除;当 \(b=2\) 时,\(n\) 能被 8 整除;而当 \(b=4\) 时,\(n\) 能被 10 整除。证毕。
得到该性质(或许是直接猜到)后,进行分类讨论:
按上式计算即可。
值得注意的是,如果在代码中混用 puts()
和取消同步流的 cout
进行输出,可能会出现输出顺序错误。
如果在代码中直接 cout<<15+(n-6)*2.5<<endl;
,结果将表示为科学计数法形式。
\(n\) 显然应当使用 long long
类型。而在 CF 中,如果用 printf()
输出,标识符应当为 "%I64d"
。
下面是 AC 代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
int T;cin>>T;
while(T--){
long long n;cin>>n;
if(n<6) cout<<15<<endl;
else{
if(n&1) ++n;
cout<<15+(n-6)*5/2<<endl;
}
}
return 0;
}
原文:https://www.cnblogs.com/q0000000/p/15139107.html