【4.7日题解】——约瑟夫问题(c代码表述)

简介: 【4.7日题解】——约瑟夫问题(c代码表述)

今日份水题开始。希望有想要提高的同学跟我们一起来刷题0.0

4.7日每日一题——约瑟夫问题


🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人

✨联系方式:2201891280(QQ)

⏳全文大约阅读时间: 20min


全文目录

☘前言☘

解题思路

📑写在最后

P1996 约瑟夫问题


解题思路

搞个链表直接模拟就好了,没那么复杂。


#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
    int data;
    struct node *next;
}NODE;
int main(){
    int m,n;
    scanf("%d %d",&m, &n);
    NODE head;      //头节点
    head.next = NULL;
    NODE *first;
    for(int i = 0;i < m;++i){   //建立链表
        NODE *tmp = (NODE *)malloc(sizeof(NODE));
        if(!i) first = tmp;
        tmp->data = m - i;
        tmp->next = head.next;//头插法
        head.next = tmp;
    }
    NODE *p = head.next,*q;
    if(n == 1){
        while(p){printf("%d ",p->data);p=p->next;}
        return 0;
    }
    first->next = head.next;//循环链表建立完成 0.0
    while(p != &head){
        for(int i = 0;i < n - 2;++i)    p = p->next;
        printf("%d ",p->next->data);
        if(p->next == p) break;
        q = p->next;
        p->next = p->next->next;
        p=p->next;
        free(q);
    }
    return 0;
}


挺好,不改了,不过看群友有拿数组模拟链表的,太强了。加油呀!


📑写在最后

今天就这样,明日再见0.0


相关文章
|
9月前
|
C语言
c语言经典例题讲解(输出菱形,喝汽水问题)
c语言经典例题讲解(输出菱形,喝汽水问题)
113 0
|
9月前
|
C语言
C语言递归问题【青蛙跳台阶】和【汉诺塔】
C语言递归问题【青蛙跳台阶】和【汉诺塔】
|
8月前
|
C语言
【C语言刷题每日一题】——打印100到200之间的素数
【C语言刷题每日一题】——打印100到200之间的素数
|
8月前
|
存储 安全 C语言
【C语言刷题每日一题】——求最大公约数(带数学计算过程详解)
【C语言刷题每日一题】——求最大公约数(带数学计算过程详解)
|
8月前
|
机器学习/深度学习 移动开发 人工智能
C语言编程例题分享
C语言编程经典100例
|
C语言
C语言经典题目之 汉诺塔问题
C语言经典题目之 汉诺塔问题
95 0
|
算法 C语言
C语言 每日一题 力扣习题 10.19日 day1
C语言 每日一题 力扣习题 10.19日 day1
62 0
洛谷P1424 小鱼的航程(改进版) C语言版
洛谷P1424 小鱼的航程(改进版) C语言版
|
算法
算法每日一题(反转单链表)C语言版
算法每日一题(反转单链表)C语言版
117 0
算法每日一题(反转单链表)C语言版
|
存储 C语言
C语言题解——倒置字符串(剑指Offer 第58题)
C语言题解——倒置字符串(剑指Offer 第58题)
108 0
C语言题解——倒置字符串(剑指Offer 第58题)