1195: 猴子选大王(结构体专题)

论坛 期权论坛 脚本     
匿名技术用户   2021-1-10 06:37   371   0

题目描述

n只猴子围坐成一个圈,按顺时针方向从1到n编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王。

输入

输入两个整数n和m,1<=m<=n<=100。

输出

输出猴王的编号

样例输入 Copy

8 3

样例输出 Copy

7
#include<cstdio>
#include<cstring>
#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstdlib>
using namespace std;
typedef int status;
typedef int elemType;
typedef struct node{
 elemType num;
 struct node *next;
}LNode,*linklist;
int main(){
 int length,king = 0;
 cin >> length;
 int k;
 cin >> k;
 linklist  p,q,head;
 if(length == 1){
  king = 1;
 }
 p = (linklist)malloc(sizeof(node));
 q = (linklist)malloc(sizeof(node));
 head = p;
 head -> num = 1;
 q = head;
 for(int i = 1; i < length; i ++){
  p = (linklist)malloc(sizeof(node));//申请链表空间 
  p -> num = i + 1;
  q -> next = p;//尾插法,通过p申请新的,然后通过q指向p相连
  q = p;//使p变为q
 }
 q -> next = head;//尾头相连
 p = head;//使p,q都指向head
 for(int i = 1; i < length; i++){
  for(int j = 1; j < k-1; j++){
   p = p -> next;
  }
  q = p -> next;
  p -> next = q -> next;
  p = q -> next;
  free(q); 
 }
 king = p -> num;
 free(p);
 if(k == 1){
  king = length;
 }
 cout << king << endl;
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP