画出该程序的流程图#include<iostream> #include<iomanip> #include"kids.h" #include"countingchildren.h" #include"print.h" using namespace std; Kid* pfirst = 0; Kid* pcurrent = 0; Kid* pivot = 0; void main() { int numberofboys, m; cout << "请输入参与约瑟夫的小孩人数"; cin >> numberofboys; cout << endl; cout << "请输出约瑟夫问题的间隔数:"; cin >> m; cout << endl; pfirst = new Kid; pfirst->code = 1; pfirst->pnext = pfirst; pcurrent = pfirst; for (int i = 1; i < numberofboys; i++) { pivot = pcurrent; pcurrent = new Kid; pcurrent->code = i + 1; cout << "请输入第" << i << "个小孩名字"; cin >> pcurrent->name; pivot->pnext = pcurrent; } pcurrent->pnext = pfirst; cout << setw(4) << pfirst->code;//遍历输出 pcurrent = pfirst->pnext; while (pcurrent != pfirst) { cout << setw(4) << pcurrent->code; pcurrent = pcurrent->pnext; } cout << endl; countchildren(pfirst, m); printWinner(pcurrent); } //countchildren.h void countchildren(Kid* pfirst, int m); //countchildren.cpp #include<iostream> #include<iomanip> #include"kids.h" #include"leave.h" #include"print.h" using namespace std; void countchildren(Kid* pfirst, int m) { Kid* pcurrent = 0; Kid* pivot = 0; pcurrent = pfirst; int j; while (pcurrent->pnext != pcurrent) { j = m; do { pivot = pcurrent; pcurrent = pcurrent->pnext; j--; } while (j > 1); printLoser(pcurrent); leave(pivot, pcurrent); } } //print.h #pragma once #include<iostream> #include<iomanip> #include"kids.h" #include"countingchildren.h" using namespace std; void printWinner(Kid* winner); void printLoser(Kid* loser); //print.cpp #include<iostream> #include<iomanip> #include"kids.h" #include"countingchildren.h" using namespace std; #include "print.h" void printWinner(Kid* winner) { cout << "最后胜利的人:" << endl; cout << "其编号:" << setw(4) << winner->code << endl; cout << "名字:" << winner->name << endl; } void printLoser(Kid* loser) { cout << "这轮失败的人:" << endl; cout << "其编号:" << setw(4) << loser->code << endl; cout << "名字:" << loser->name << endl; } //Leave.h #pragma once #include<iostream> #include<iomanip> #include"kids.h" #include"countingchildren.h" using namespace std; void leave(Kid* pivot, Kid* pcurrent ); //leave.cpp #include<iostream> #include<iomanip> #include"kids.h" #include"countingchildren.h" using namespace std; void leave(Kid* pivot, Kid* pcurrent) { pivot->pnext = pcurrent->pnext; delete pcurrent; pcurrent = pivot->pnext; }
时间: 2024-03-07 20:51:19 浏览: 20
抱歉,由于我是一名语言模型,无法绘制流程图。不过,我可以为您解释程序的大致流程:
1. 定义 Kid 类型的指针变量 pfirst、pcurrent、pivot 和 winner,分别表示第一个孩子、当前孩子、前一个孩子和胜利者。
2. 通过输入获取参与游戏的小孩人数和问题的间隔数。
3. 创建 Kid 类型的对象,存储每个孩子的编号和名字,将它们连接成一个环形链表,并输出链表中每个孩子的编号。
4. 调用 countchildren 函数,对孩子进行计数,每次计数到第 m 个孩子就将其删除,直到只剩下一个孩子为止。
5. 输出最后胜利的孩子的编号和名字。
其中,countchildren 函数调用了 leave 函数和 printLoser 函数,leave 函数用于删除孩子,printLoser 函数用于输出每轮被删除的孩子的编号和名字。程序还包括 printWinner 函数,用于输出最后胜利的孩子的编号和名字。
相关问题
#include <stdlib.h> #include <stdio.h> #include <iostream> #include <string>
#include <stdlib.h> 是C语言标准库中的一个头文件,它提供了一些常用的函数和宏定义,用于处理内存分配、随机数生成、字符串转换等操作。
#include <stdio.h> 是C语言标准库中的另一个头文件,它提供了输入输出相关的函数和宏定义,用于读取和写入数据。
#include <iostream> 是C++标准库中的一个头文件,它包含了C++中输入输出流的定义,提供了cin、cout等对象和相关操作符,用于方便地进行输入输出操作。
#include <string> 是C++标准库中的另一个头文件,它定义了字符串类string及其相关操作,提供了方便的字符串处理功能。
这些头文件是编程中常用的头文件,通过包含它们可以使用其中定义的函数、类和宏等功能来完成相应的操作。
#include<stdlib.h> #include<string.h> #include<iostream>
#include 和 #include<> 都是C++的预处理指令,用于引入头文件。其中,#include<> 用于引入标准库的头文件,#include "" 用于引入用户自定义的头文件。所以,对于标准库的头文件,应该使用 #include<iostream>;对于自定义的头文件,应该使用 #include "iostream"。而 #include<stdlib.h> 和 #include<string.h> 是C语言的头文件,C++中应该使用 #include<cstdlib> 和 #include<cstring>。