#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define MAX_NUM 10005
#define PI 3.1415926
double res;
int ans, n, m, t, len, cnt = 0, minn = MAX_NUM,maxx = 0;
string s;
char ch, s1[MAX_NUM] = "", s2[MAX_NUM] = "";
bool flag = false;
int dp[MAX_NUM][MAX_NUM] = {0}, bucket[MAX_NUM]= {0};
typedef struct Node {
int value;
Node *next;
}NODE,*pNode, *NodeList;
pNode createNode(int value, pNode next) {
pNode node = (pNode) malloc(sizeof(NODE));
node->value = value;
node->next = next;
return node;
}
int main() {
cin >> n >> m;
NodeList head, last;
// 创建循环链表
for(int i = 0; i < n; i++) {
pNode node = createNode(i+1, NULL);
if(i == 0) {
head = node;
last = node;
} else {
last->next = node;
last = node;
}
if(i == n-1) last->next = head;
}
// 实现约瑟夫环 1 即输出最后的胜利者
int i = 1;
while (head->next != head) {
if(i == m) {
pNode p = head;
last->next = head->next;
free(p);
i = 1;
head = last->next;
} else {
last = head;
head = head->next;
i++;
}
}
cout << head->value << endl;
return 0;
}
公式法
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n, m;
cin >> n >> m;
int p = 0;
for(int i = 2; i <= n; i++) {
p = (p + m) % i;
}
cout << p + 1 << endl;
return 0;
}