【题目描述】
小Y的桌子上放着n个苹果从左到右排成一列,编号为从1到n。
小苞是小Y的好朋友,每天她都会从中拿走一些苹果。
每天在拿的时候,小苞都是从左侧第1个苹果开始、每隔2个苹果拿走1个苹果。随后小苞会将剩下的苹果按原先的顺序重新排成一列。
小苞想知道,多少天能拿完所有的苹果,而编号为n的苹果是在第几天被拿走的?
【输入】
输入的第一行包含一个正整数n,表示苹果的总数。
【输出】
输出一行包含两个正整数,两个整数之间由一个空格隔开,分别表示小苞拿走所有苹果所需的天数以及拿走编号为n的苹果是在第几天。
【输入样例】
8
【输出样例】
5 5
思路:这是个数学思维题。
通过简单推算,我们发现每次总量会减少(n-1)/3+1个,因此只要不断地减少(n-1)/3+1个元素直到n为0,就能算出总的结束轮数,在计算的过程中记录哪一次选中原来的最后一个就可以了!
#include<bits/stdc++.h>
using namespace std;
int main(){int n,t=0,d=0;//n是个数,t统计天数,d表示第几天拿到 cin>>n;//输入个数 while(n){//满足条件就一直循环 t++;//从第一天开始 if((n-1)%3==0&&d==0)//如果总数n-1取模为0,同时目标数也是0 d=t;//就将拿到目标的天数赋值给d n=n-((n-1)/3+1);//每次取完苹果后剩余的值赋值给n }cout<<t<<" "<<d;//输出结果 return 0;
}
每一次拿走的都是三分之N;
循环次数就是答案。
#include <bits/stdc++.h>
#include <cmath>
using namespace std;
int n, take = 0, cnt = 1, ans2 = 0;
int main()
{cin >> n;while (n>0) {if (!ans2 && n%3==1) {ans2 = cnt;}take = ceil(1.0*n/3);// cout << "n take " << n << " " << take << endl;n = n - take;cnt++;}cout << cnt-1 << " " << ans2 << endl;return 0;
}