在此之前先看看一般的约瑟夫问题
发现这个题唯一不一样的就是m,只要在递推的时候不断的更换m数组即可
#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
#define ll long long
int n,k;
int a[105],m[105],f[105];
int main(){
while(~scanf("%d%d",&n,&k)){
for(int i=1;i<=k;i++)scanf("%d",&m[i]);
f[1]=0;
int mod=(n-1)%k;
if(mod==0)mod=k;
for(int i=2;i<=n;i++){
f[i]=(f[i-1]+m[mod])%i;
mod--;
if(mod==0)mod=k;
}
cout<<f[n]<<endl;
}
return 0;
}