第一道题居然让我做了20分钟!
题目大意
每次从第一个开始取,每隔两个数取一次,问去的次数和取出 \(n\) 的次数。
思路
想不到怎么办,那就在草稿纸上列下样例找思路:
1 2 3 4 5 6 7 8
- 第一次取
1 4 7
; - 第二次取
2 6
; - 第三次取
3
; - 第四次取
5
; - 第五次取
8
。
规律不就出来了吗:每次取出的数字个数都为 $\frac{n+2}{3} $。
只要 \(\frac{n+2}{3} \ge 1\) , \(ans+1\)记录次数,如果\(\frac{n+2}{3} < 1\) ; \(ans\)就加上 \((n+2)\div3\) 的余数。\(n\) 每次减去 \((n+2)\div3\)。
对于第二点我们只要记录下 \(n+2\) 被 \(3\) 第一次整除的时候,如果没有被记录,就说明是在最后一次取出的。
code
#include<bits/stdc++.h>
using namespace std;
int n,ans,s,i;
int main()
{
cin>>n;
bool l=0;
while(n)
{
i++;
if((n+2)%3==0&&l==0)
s=i,l=1;
if((n+2)/3!=0)
ans++;
else
ans+=n%3;
n=n-(n+2)/3;
}
if(s==0)
s=ans;
cout<<ans<<' '<<s;
return 0;
}
点个赞吧
标签:小苹果,frac,int,2023,ans,div3,CSP From: https://www.cnblogs.com/Hyper-zero/p/18377778