用c++编写程序
用c++编写程序(1)掌握指向结构体的指针用法(2)掌握new和delete操作符2、方法原理函数采用指向结构体的指针,要求用new和delete来分配、释放所需内存空间...
用c++编写程序(1)掌握指向结构体的指针用法
(2)掌握new和delete操作符
2、方法原理
函数采用指向结构体的指针,要求用new和delete来分配、释放所需内存空间。
4、实验内容
编写程序实现下述功能:由17人围成一个圈,编号1~17,从第1号开始报数,报到3的倍数的人离开,一直数下去,直到最后只剩下1个人,求此人的编号。 展开
(2)掌握new和delete操作符
2、方法原理
函数采用指向结构体的指针,要求用new和delete来分配、释放所需内存空间。
4、实验内容
编写程序实现下述功能:由17人围成一个圈,编号1~17,从第1号开始报数,报到3的倍数的人离开,一直数下去,直到最后只剩下1个人,求此人的编号。 展开
2个回答
展开全部
#include <iostream>
using namespace std;
struct person {
int id; // 编号
struct person *next; // 下一个人
};
// 打印报数的过程
struct person * start(struct person *head);
int main()
{
struct person *head = new struct person; // 编号为1的人
head->id = 1;
struct person *curr = head;
struct person *tmp = NULL;
for (int i = 2; i <= 17; i++)
{
tmp = new struct person;
tmp->id = i;
curr->next = tmp;
curr = tmp;
}
curr->next = head;
cout << "报数!" << endl;
struct person * last = start(head);
cout << "最后一个人的编号为:" << last->id << endl;
delete last; // 程序结束,最后一个人也删掉
return 0;
}
struct person * start(struct person *head) {
int num = 1;
struct person *curr = head;
cout << "编号" << curr->id << ":" << num << endl;
while (true) {
num++;
cout << "编号" << curr->next->id << ":" << num << "\t";
if (num % 3 == 0) { // 报到3的倍数则离开
struct person *tmp = curr->next;
if (tmp->next->id == curr->id) // 只剩一个人,则退出循环
{
cout << "离开" << endl;
delete tmp;
break;
}
curr->next = tmp->next;
cout << "离开" << endl;
delete tmp;
} else {
curr = curr->next;
cout << endl;
}
}
return curr;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询