#include<iostream> #include<vector> using namespace std; int main() { int n; int m; int k; cin >> n >> m>>k; vector<int>inp(n); for (int i = 0; i < n; i++) { inp[i] = i+1; } int count = 0; int renshu = n; int cur = k-1; while (count < n - 1)//count==n-1时结束 { if (cur + m > renshu) { if ((cur+m)%renshu == 0) cur=renshu-1; else cur = 0 + ((cur+m)%renshu) - 1; } else cur = cur + m-1; //cout << "cur=" << cur << ' '; renshu--; count++; //cout << "消除:"; //cout << *(inp.begin() + cur) << endl; inp.erase(inp.begin() + cur); } cout << inp[0]; return 0; }
#include<iostream> #include<cstdio> #include<queue> using namespace std; int main(){ int n,k,m; while(scanf("%d%d%d",&n,&k,&m)){ if(n==0 && k==0 && m==0){ break; } queue<int>children; for(int i=1;i<=n;i++){ //依次加入队列 children.push(i); } for(int i=1;i<k;i++){ //使编号为p的小孩站在队首 children.push(children.front()); children.pop(); } while(!children.empty()){ for(int i=1;i<m;i++){ //使m-1个小孩依次重新入队 children.push(children.front()); children.pop(); } if(children.size()==1){ //最后一个小孩的输出不同 printf("%d\n",children.front()); }else{ printf("%d,",children.front())'' } children.pop(); } } return 0; }
#include <iostream> #include <queue> using namespace std; int main() { int n,p,m; while(cin>>n>>p>>m) { if(n==0&&p==0&&m==0) break; queue<int> myQueue; for(int i=1;i<n+1;i++) myQueue.push(i); while(myQueue.front()!=p) { int i = myQueue.front(); myQueue.pop(); myQueue.push(i); } while(!myQueue.empty()) { for(int i=0;i<m-1;i++) { int a = myQueue.front(); myQueue.pop(); myQueue.push(a); } if(myQueue.size()==1) cout<<myQueue.front()<<endl; else cout<<myQueue.front(); myQueue.pop(); } } }
import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNextLine()) { int n = sc.nextInt(); int k = sc.nextInt(); int m = sc.nextInt(); solve(n,k,m); } } public static void solve(int n, int k, int m) { Queue<Integer> queue = new LinkedList<Integer>(); for(int i = 0; i < n; i++) { queue.offer(i+1); } for(int i = 0; i < k - 1; i++) { queue.offer(queue.poll()); } while(!queue.isEmpty()) { for(int i = 0; i < m - 1; i++) { queue.offer(queue.poll()); } int a = queue.poll(); System.out.print(a); } } }
#include <iostream> #include <cstdio> #include <queue> using namespace std; int main(){ int n, k, m; while(scanf("%d%d%d",&n, &k, &m)){ if(n == 0 && k == 0&& m==0){ break; } queue<int> children; for(int i=1;i<=n;++i){ children.push(i); } for(int i=1;i<k;++i){ children.push(children.front()); children.pop(); } while(!children.empty()){ for(int i=1;i<m;++i){ children.push(children.front()); children.pop(); } if(children.size() == 1){ printf("%d\n", children.front()); }else{ printf("%d", children.front()); } children.pop(); } } return 0; }
public class Solution { public static int LastRemaining(int n,int m){ if(n<1||m<1) return -1; int last = 0; for(int i=2;i<=n;i++) last= (last+m)%i; return last+1; } public static void main(String[] args) { int out = LastRemaining(2,1); System.out.println(out); } }
#include<stdio.h> #include<stdlib.h> typedef struct Node { int num; struct Node *next; } LinkList; LinkList *creat(int n) { LinkList *p, *q, *head; int i = 1; p = (LinkList *)malloc(sizeof(LinkList)); p->num = i; head = p; for (i = 2; i <= n; i++) { q = (LinkList *)malloc(sizeof(LinkList)); /*Malloc()向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。*/ q->num = i; p->next = q; p = q; } p->next = head; /*使链表尾指向链表头 形成循环链表*/ return head; } void fun(LinkList *L, int m) { int i; LinkList *p, *s, *q; p = L; printf("出列顺序为:"); while (p->next != p) { for (i = 1; i < m; i++) /*从1开始*/ { q = p; p = p->next; } printf("%5d", p->num); s = p; q->next = p->next; p = p->next; /*使p指向新的起点*/ free(s);/*free()与malloc()函数配对使用,释放malloc函数申请的动态内存*/ } printf("%5d\n", p->num); } int main() { LinkList *L; int n, m; n = 9; m = 5; L = creat(n); fun(L, m); return 0; }