用一般的约瑟夫环会超空间
看到m==2 就可能是找规律
#include<iostream>
#include<cmath>
using namespace std;
int num,down;
string s;
int main(){
while(cin>>s){
if(s=="00e0") break;
num=((s[0]-'0')*10+(s[1]-'0'))*pow(10,s[3]-'0');
down=1;
while(down*2<=num){
down<<=1;
}
cout<<(num-down+1)*2-1<<endl;
}
return 0;
} 打表代码#include<iostream>
#include<cmath>
using namespace std;
const int N=99e6+10;
int f[N],num;
string s;
void init(int x){
f[0]=1;
for(int i=1;i<=x;i++) f[i]=(f[i-1]+2)%i;
}
int main(){
init(99e6+10);
for(int i=1;i<20;i++)cout<<i<<" "<<f[i]+1<<endl;
return 0;
} 
京公网安备 11010502036488号