


题意理解
每天操作规则:
从最左边第 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,当天就是目标苹果被拿走的日子。
#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;}
文章来源:
四季读书网
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至23467321@qq.com举报,一经查实,本站将立刻删除;如已特别标注为本站原创文章的,转载时请以链接形式注明文章出处,谢谢!