[CSP-J 2023] 小苹果

[CSP-J 2023] 小苹果

第一道题居然让我做了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\) 第一次整除的时候,如果没有被记录,就说明是在最后一次取出的。

ACcode

#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;
}

点个赞吧

posted @ 2024-08-24 15:05  Hyper_zero  阅读(457)  评论(0)    收藏  举报