理解面向对象程序设计中的抽象理论计划

阀门2021年09月06日

以下是利用结构体的方法解决josephus问题: 当我们学过结构体后,我们了解到结构体自身的成员指针可以指向自身对象的地址的时候,我们很容易想到解决这个数学问题,用结构体来描述是再合适不过的了,用它可以很完美的描述环形链表。

#include iostream

#include string

using namespace std;

struct Children

{

int number;

Children *next;

};

void show(Children *point,int num)//环链输出函数

{

for(int i=1;i=num;i++)

{

coutpoint-number\",\";

point = point-next;

}

}

void main()

以及球队的季后赛首轮主场优势。 ■摸不到球 {

int num;//孩子总数

int interval;//抽选号码

cout\"请输入孩子总数:\";

cinnum;

cout\"请输入抽选号码:\";

cininterval;

Children *josephus = new Children[num];//设置圈的起点指针,并动态开辟堆空间用于存储数据

Children *point = josephus;//用于初化链表的指针,起始地址与josephus指针相同

for(int i=1;i=num;i++)

{

point - number = i;

point - next = josephus + i % num;//利用+1取模的方式设置节点的next指针,当到最后的时候自动指向到第一个,形成环链

point = point-next;//将位置移到下一饿节点也就是下一个小孩的位置

}

show(point,num);

Children *cut_point;

point=josephus[num-1];//把起始指针设置在最后一个节点,当进入循环的时候就会从0开始,这样就好让不需要的节点脱离

int k=0;//故意设置一个k观察while循环了多少次

while(point-next!=point)//通过循环不断的寻找需要放弃的节点

{

k++;

for(int i = 0;iinterval;i++)//找需要放弃的节点位置

{

cut_point=point;//存储截断位置指针

point=cut_point-next;//将point的指针移动到放弃的节点位置,此处也和while循环终止条件有关系

}

cut_point-next=point-next;//将截断出的next指针设置成放弃处节点的next指针,使放弃处节点也就是不需要的节点脱离

cout\"k:\"kendl;

}

cout\"\\n最后的赢家:\"endlpoint-numberendlpointendlpoint-nextendl;

delete[] josephus;

t();

t();

}

杭州医院白癜风
新标木门怎么样
咸宁白癜风专科医院是哪个
相关阅读
美股短线跳水,三大交易者悉数转跌

钛大媒体 App 5年初20日通告,美股短线蹦床,三大股指悉数转跌。截至目前,...

2024-12-14
2022绍兴市公务员考试笔试时间重启公告

一、出题一段时间和课程内容 (一)课程内容任用公职人员出题一段时间和课程...

2024-11-19
破除算法暗箱需形成四人

亦同,正中央网信办牵头开展“清朗·2022年正则表达式综合治理”专项行动,...

2024-10-26
为什么据说茶客都比较喜欢收藏易武茶呢?

一、易武作为泡茶出产地,有很多名声大振都较浅居于此,应运而生了易武老...

2024-10-23
全民拍@全体毕业生:出发了,请在心中升起一轮人马座

↑私立大学就读于生。(新政策拍戏拍戏平日来稿) 就读于 是紧接著伤感 伤...

2024-10-21
想要成为社交场合的焦点?提升个人魅力的4个法理

我们便是留言板。而不论是岗位里面,还是孤独里面,那些拥有同样同样风格...

2024-10-20
友情链接