理解面向对象程序设计中的抽象理论计划
以下是利用结构体的方法解决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