UVa 133 救济金发放

博客内容描述了如何解决UVA 133问题,即模拟一个圆圈中的人按照逆时针和顺时针规则交替淘汰的过程。文章提到了使用双向循环链表作为解决方案,并强调了在实现过程中要注意的细节,如避免头指针的影响、正确处理指针相等判断、避免重复释放内存、理解和使用指向指针的引用形参。此外,还给出了调试策略,如对比AC代码和简化错误数据以加速调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:所有n个人围成一个圈,一边从1号开始逆时针数k个,出局;一边从n号开始顺时针数m个,出局。两个同时发生。如果这两个数到同一个人,就这个人出局。

        facing inwards 面朝里; counter 相反地,clockwise 顺时针,counter-clockwise 逆时针

思路:双向循环链表来模拟。按以前书上介绍的实现的,有一个头指针,首尾都指向它。但这里由于要找第k个、第m个,需要进行头指针的判断,所以觉得这里不增加头指针比较好,或者头指针只指向头结点,而头结点和尾结点是互指的,不像这里实现的头结点和尾结点之间还有一个头指针结点。

           看很多人用数据模拟实现的。。

注意:if里的相等判断,用==

            free同一块内存多次发生未定义错误

           指向指针的引用形参的问题。

找不出错误时,可以跑一下别人AC的程序,对比相同输入的输出。

一般发现一组不一致的或错误的数据时,可以试图找到一组尽量简单的错误数据,除非只对该组数据错误。数据越简单,越容易调试。如果只有很大的数据才会出错,通常意味着程序在处理极限数据方面有问题。

#include<stdio.h>
#include<malloc.h>

struct Node
{
 int data;
 Node *next;
 Node *prior;      
};

Node* CreateList(Node* &head, int n);
Node* searchk(Node *ptr, Node* &head, int k);
Node* rsearchm(Node *ptr, Node* &head, int m);
void deletenode
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值