题目如下
题目描述
有 n 个一种松鼠喜欢吃的果子由下向上串排成一列,并标号 1∼n。一只松鼠从最下果子开始向上跳,并且第 i 次跳可以一次跳过 (i^3mod5+1) 个果子,并把脚下的果子吃了,如果上面有果子,在重力作用下,都将向下掉下一格。如第 1 次跳从第一个果子上跳过 (13mod5+1=)2 个果子,可跳到第 3 个果子上,并把第 3 个果子吃了;第 2 次从第 4 个果子上(落在原来第三个果子位置)跳过 (23mod5+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 <bits/stdc++.h>
using namespace std;
int n,m,w = 1,g = 1,l;
int a[300] = {0};
int main(){
cin>>n>>m;
l = n;
for(int i = 1;i <= n;i++){
a[i] = i;
}
for(int i = 1;i <= m && a[i];i++){
w = w + i * i * i % 5 + 1;
if(w > l){
w = 1;
i--;
continue;
}
g = a[w];
a[w] = 0;
for(int i = w + 1;i <= l;i++){
a[i - 1] = a[i];
}
a[l] = 0;
l--;
}
cout<<g;
return 0;
}
点个赞吧!!!求求了!!!
317

被折叠的 条评论
为什么被折叠?



