• 洛谷 P2069 松鼠吃果子


    题目描述

    有N个一种松鼠喜欢吃的果子由下向上串排成一列,并标号1,2,...N。一只松鼠从最下果子开始向上跳,并且第i次跳可以一次跳过i*i*i除以5的余数+1个果子(=i*i*i%5+1),并把脚下的果子吃了,如果上面有果子,在重力作用下,都将向下掉下一格。如第1次跳从第一个果子上跳过1*1*1%5+1=2个果子,可跳到第3个果子上,并把第3个果子吃了;第2次从第4个果子上(落在原来第三个果子位置)跳过2*2*2%5+1=4个到第8个果子上,并把第8个吃了;如此...。

    当然,总有一次松鼠会跳出这串果子的最前面,设为每K次,它吃不到任何果子了。这时它回到最下面的果子上,重做它的第K次跳,以求吃到果子。如此,问它吃的第m只果子(即第M跳吃到的果子)的标号是什么?

    输入输出格式

    输入格式:

     

    一共两行,分别为N和m。(1<=m<=n<=200,并且满足能够跳到第m次)

     

    输出格式:

     

    一个数,即它吃的第m只果子的标号

     

    输入输出样例

    输入样例#1: 复制
    10 
    4
    
    输出样例#1: 复制
    9

    说明

    注:吃掉的果子依次为3,8,4(回到下面重做第3跳),9(回到下面重做第4跳)

    思路:模拟

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,m,pos;
    int num[201];
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)    num[i]=i;
        pos=1;
        for(int i=1;i<=m;i++){
            int x=i*i*i%5+1;
            pos+=x;
            if(pos>n)    pos=1+x;
            if(i==m)    break;
            for(int j=pos;j<n;j++)    num[j]=num[j+1];
            n--;
        }
        cout<<num[pos];
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    1.33 (累积互素数)
    1.33 (过滤累积和 求区间内所有素数之和)
    1.32 (更高层次的抽象! 乘法与加法本来就是一回事)
    1.31 (另一种求圆周率的算法)
    1.30 (递归的sum变迭代)
    习题1.29 (积分方法的优化---simpson规则)
    1.3.1 (对过程的抽象)
    SICP习题 1.23(素数查找的去偶数优化)
    SICP习题 1.22(素数)
    pom.xml
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7860436.html
Copyright © 2020-2023  润新知