4 solutions
-
0
c
#include<stdio.h> int main() { int m,n; int temp[1000]; int t=0;//记第几个死 int f[1000]; scanf("%d %d",&m,&n); for(int i=0;i<m;i++) { f[i]=i+1; }//标号每个人的站位 int i=0; int k=0;//报数 int c=m;//表示还剩的人数 while(c>0)//死光了就不循环了 { if(f[i]!=0)//死人不用报数 k++;//开始报数 if(k==n) { t++; temp[i]=t; c--; f[i]=0;//死人腾出站位 k=0;//重新报数 } i=(i+1)%m;//围成了圈,当i=m-1时,i=0,又重新开始数
} for(int j=0;j<m;j++) printf("%d ",temp[j]); return 0; } -
0
这道题是一道经典的循环链表
#include <bits/stdc++.h> //循环链表 using namespace std; const int maxn = 1e3 + 5; int id[maxn]; typedef struct Node { int value; Node *next; }NodeList; int main(void) { int n, m; cin >> n >> m; NodeList *head, *last = NULL; NodeList *node; for (int i = 1; i <= n; i++) { node = (NodeList*)malloc(sizeof(NodeList)); node->value = i; if (i == 1) { head = node; last = node; }else { last->next = node; last = node; } } node->next = head; last = node; int i = 1; int cnt = 1; while (head->next != head) { if (i == m) { NodeList *p = head; last->next = head->next; id[p->value] = cnt; cnt ++; free(p); i = 1; head = last->next; }else { last = head; head = head->next; i ++; } } for (int i = 1; i <= n; i++) { if (!id[i]) id[i] = n; cout << id[i] << ' '; } return 0;
}
-
0
约瑟夫环 经典题了,用 队列 随别 虐杀。数组的话 也可以。
#include <iostream> #include <queue> using namespace std; int arr[1005]; // 到底是 第几次 自杀的 都存在 这里 int main(void) { int n, k;// n 个 人,报数到 k 就会自杀 cin >> n >> k; queue<int> que; for (int i = 1; i <= n; ++i) { que.push(i); // 先把这些人 都添加到 队列里 } int ans = 0;// 记录是第几个 出去的 int jilu = 0; // 记录 数到 几了 while (que.size()) { int id = que.front();// 编号 que.pop(); jilu++; if (jilu != k) { que.push(id); } else { ans++; arr[id] = ans; jilu = 0; } } for (int i = 1; i <= n; ++i) { cout << arr[i] << " "; } return 0; }
-
0
#include <stdio.h> #include <algorithm> #include <math.h> #include <vector> #include <iostream> #include <string.h> #include <queue> using namespace std; int n,k; queue<int> q; int a[1005]; int main() { scanf("%d%d",&n,&k); for(int i=1; i<=n; i++) { q.push(i); } int sum=1,i=0,j=0; while(sum<n) { if(j!=k-1) { int tmp=q.front(); q.pop(); q.push(tmp); j++; } else { a[q.front()]=sum; sum++; q.pop(); j=0; } } a[q.front()]=sum; for(int i=1; i<=n; i++) printf("%d ",a[i]); return 0; }
- 1
Information
- ID
- 79
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 6
- Tags
- # Submissions
- 286
- Accepted
- 98
- Uploaded By