报数

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 报数


题目描述

输入

输出

输出一个数表示最后一人的编号。

样例输入1

7 3

样例输出1

4

做法1

#include <bits/stdc++.h>
using namespace std;
struct LinkedList {
    int data;
    LinkedList *fLink;
    LinkedList *bLink;
};
/* 在节点list指向的对象后面插入节点node 并返回节点node */
LinkedList *append_node(LinkedList *list, LinkedList *node) {
    list->bLink = node;
    node->fLink = list;
    return node;
}
/* 在链表中删除节点node 并返回删除node后 此位置应放置的节点 */
LinkedList *remove_node(LinkedList *node) {
    if (node->fLink) {
        node->fLink->bLink = node->bLink;
    }
    if (node->bLink) {
        node->bLink->fLink = node->fLink;
    }
    LinkedList *ret = node->bLink;
    node->fLink = node->bLink = NULL;
    free(node);
    return ret;
}
int main() {
    int n, k;
    /* 构造1~n的环形双向链表 */
    LinkedList *head = (LinkedList *) malloc(sizeof(LinkedList));
    head->data = 1;
    head->fLink = NULL;
    head->bLink = NULL;
    LinkedList *cur = head;
    scanf("%d%d", &n, &k);
    for (int i = 2; i <= n; ++i) {
        cur = append_node(cur, (LinkedList *) malloc(sizeof(LinkedList)));
        cur->data = i;
    }
    cur->bLink = head;
    head->fLink = cur;
    cur = head;
    for (int i = n; i > 1; --i) {
        /* 从编号为1的节点到编号为k的节点 需要移动k-1次 对于环的长度为i的情况 k-1和(k-1)%i等价 */
        int kk = (k - 1) % i;
        while (kk--) cur = cur->bLink;
        cur = remove_node(cur);
    }
    printf("%d\n", cur->data);
    /* 删除最后剩余的1个节点(非必要) */
    remove_node(cur);
    return 0;
}
相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
21天前
报数
报数。
27 4
|
11月前
1334:【例2-3】围圈报数
1334:【例2-3】围圈报数
【剑指offer】-扑克牌顺子-44/67
【剑指offer】-扑克牌顺子-44/67
|
12月前
leetcode:38.报数
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。
44 0
|
12月前
|
容器
剑指offer 69. 扑克牌的顺子
剑指offer 69. 扑克牌的顺子
71 0
PTA猴子选大王(约瑟夫环问题)
PTA猴子选大王(约瑟夫环问题)
|
C++
201912-1报数
201912-1报数
60 0
201912-1报数
LeetCode第38题:报数
题目 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下: 1、12、113、214、12115、111221 1 被读作("一个一"), 即 11。11 被读作("两个一"), 即 21。
[剑指offer] 扑克牌顺子
本文首发于我的个人博客:尾尾部落 题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。
966 0

热门文章

最新文章