信奥赛真题2023CSP-J第二轮 小苹果

四季读书网 1 0
信奥赛真题2023CSP-J第二轮 小苹果
信奥赛真题2023CSP-J第二轮 小苹果-第1张图片-四季读书网
信奥赛真题2023CSP-J第二轮 小苹果-第2张图片-四季读书网
信奥赛真题2023CSP-J第二轮 小苹果-第3张图片-四季读书网

题意理解

每天操作规则:

从最左边第 1 个苹果开始,每隔 2 个拿走 1 个 → 等价于:每 3 个苹果一组,拿走每组的第 1 个;

拿完之后,剩下的苹果按原来顺序重新排成一排,第二天继续这个操作。

求两个答案:

一共多少天可以把所有苹果拿完;

原始编号为 n的那个苹果,会在第几天被拿走。

样例输入 

8

输出 

5  5

关键规律

每一天,当前有 m个苹果,当天拿走的数量是 ceil(n/3.0) 就是n除以3.0的结果向上取整。

剩下苹果数量:

m  =m−ceil(n/3.0)

循环直到 m=0,统计循环次数就是总天数。

原编号为 n的苹果永远处在当前序列的最后一个位置;什么时候最后一个苹果会被取走?只有当当前长度 m%3=1的时候,最后一个刚好是最后那组第一个,会在当天被拿走。我们一边模拟每天的 m,一旦发现 m%3==1,当天就是目标苹果被拿走的日子。

C++ 完整代码
#include<bits/stdc++.h>using namespace std;int  n, k, cnt;intmain(){	cin>>n;while(n > 0) {		cnt++;if(k==0 && n % 3 == 1) k = cnt;		n -= int(ceil(n / 3.0));	}	cout<<cnt<<' '<<k;return 0;}

抱歉,评论功能暂时关闭!