2 条题解

  • -1
    @ 2023-11-4 17:15:06
    #include<bits/stdc++.h>
    using namespace std;
    int n,sum,ans;
    int main(){
    	freopen("apple.in","r",stdin);
    	freopen("apple.out","w",stdout);
    	scanf("%d",&n);
    	while(n){
    		sum++;
    		if(!((n-1)%3)&&!ans) ans=sum;
    		n-=(n-1)/3+1;
    	}
    	printf("%d %d",sum,ans);
    	return 0;
    }
    
    • -3
      @ 2023-11-5 9:31:29

      CSPJ2023A题解

      思路

      本题根据模拟,可以发现每次取走的苹果编号取余3都为1(mod3=1\mod 3=1)。
      根据此性质,每次取走的苹果数量就是要求现在的苹果总数里,有几个mod3=1\mod 3=1的数。很容易的,我们能够想到,可以用一个while循环来多每次的苹果数操作,当苹果数为0时结束。在循环中第一次发现nmod3=1n \mod 3=1时,记录下来作取n号苹果是第几天。注意不要重复存储。
      在这里,有一点细节需要注意,就是求总量中含几个ii,满足imod3=1i \mod 3=1

      AC代码

      #include <bits/stdc++.h>  //By 洋葱头
      using namespace std;
      int n, day, dayn, flag = 1;
      //day表示取完要几天,dayn表示取n号在哪一天 
      int main() {
          //freopen("apple.in", "r", stdin);
          //freopen("apple.out", "w", stdout);  //输入输出重定向
      	scanf("%d",&n);
      	while(n) {
      		day = day + 1;//操作次数+1 
      		if(n % 3 == 1 && flag) //取到n号并且是第一次
      			dayn = day, flag = 0;
      		int m = (n + 2) / 3; //本次操作可以取走几个
      		n = n - m; //取走苹果 
      	} 
      	cout << day << " " << dayn;
      }
      
      • 1

      信息

      ID
      1
      时间
      1000ms
      内存
      512MiB
      难度
      7
      标签
      递交数
      735
      已通过
      155
      上传者