搜索 约瑟夫环问题 可以找到链接 算法科普:什么是约瑟夫环-五分钟学算法 ,里面详细讲解了几种算法。数组求解和循环链表会堆溢出,递归求解会栈溢出。迭代法最好。下面代码运行通过了。
#include <stdio.h>
int Joseph(int n,int m)
{
int i;
int x,y;
if(n <= 1 || m <= 1)
return -1;
if(m % 2 == 0)
y = 1;
else
y = 2;
for(i = 3; i <= n; i++)
{
x = (y-1 + m) % i + 1;
y = x;
}
return y;
}
int main()
{
int n,m,x;
printf("输入 n 和 m :\n");
scanf("%d %d",&n,&m);
x=Joseph(n,m);
printf("最后一个数为:%d\n",x);
return 0;
}
// Output
输入 n 和 m :
10000000 3
最后一个数为:3093025
附注:求赞助积分和C币。加入CSDN将近20年了。最近几年忙小孩没登录。刚才搜索到一本电子书想下载,需要20积分/C币。赞助多少都可以。多谢。
你不需要用long long类型呀。改为long因该就可以了。long类型可以有2的31次方,即2,147,483,648数据单元,大于要求的10000000,这样只要40MB空间。