鱼C论坛

 找回密码
 立即注册
查看: 1276|回复: 1

[已解决]打约瑟夫环代码出现bug

[复制链接]
发表于 2020-9-26 15:02:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
/*********************************
  对应教材2.7.1节,约瑟夫环问题
**********************************/
#include<iostream>
using namespace std;

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

class JosephRing
{
public:
        JosephRing();
        JosephRing(int n);
        ~JosephRing();
        void Joseph(int m);
private:
        Node* rear;
};
JosephRing::JosephRing()
{
        rear = NULL;
}

JosephRing::JosephRing(int n)
{
        Node* s = NULL;
        rear = new Node;
        rear->data = 1; rear->next = rear;
        for (int i = 2; i <= n; i++)
        {
                s = new Node; s->data = i;
                s->next = rear->next;
                rear->next = s;
                rear = s;
        }
}
JosephRing :: ~JosephRing()
{
        if (rear != NULL) {
                Node* p = rear->next;
                while (rear->next != rear)
                {
                        rear->next = p->next;
                        delete p;
                        p = rear->next;
                }
                delete rear;
        }
}

void JosephRing::JosephRing(int m)(错误:不能在构造函数上指定函数类型
{
        Node* pre = rear, * p = rear->next;
        int count = 1;
        cout << "出环顺序是:";
        while (p->next != p)
        {
                if (count < m) {
                        pre = p; p = p->next;
                        count++;
                }
                else{
                        cout << p->data << "\t";
                        pre->next = p->next;
                        delete p;
                        p = pre->next;
                        count = 1;
                }
        }
        cout << p->data << "\t";
        delete p;
        rear = NULL;
}
int main()
{
        int n, m;
        cout << "请输入约瑟夫环的长度是:";
        cin >> n;
        cout << "请输入密码";
        cin >> m;
        JosephRing R(n);
        R.Joseph(m);
        return 0;
}
最佳答案
2020-9-26 15:08:57
第52行,你把函数名写错了,把Joseph写成JosephRing了。前者是一般函数,后者是构造函数
#include<iostream>
using namespace std;

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

class JosephRing
{
public:
        JosephRing();
        JosephRing(int n);
        ~JosephRing();
        void Joseph(int m);
private:
        Node* rear;
};
JosephRing::JosephRing()
{
        rear = NULL;
}

JosephRing::JosephRing(int n)
{
        Node* s = NULL;
        rear = new Node;
        rear->data = 1; rear->next = rear;
        for (int i = 2; i <= n; i++)
        {
                s = new Node; s->data = i;
                s->next = rear->next;
                rear->next = s;
                rear = s;
        }
}
JosephRing :: ~JosephRing()
{
        if (rear != NULL) {
                Node* p = rear->next;
                while (rear->next != rear)
                {
                        rear->next = p->next;
                        delete p;
                        p = rear->next;
                }
                delete rear;
        }
}

void JosephRing::Joseph(int m)//你把函数名写错了,把Joseph写成JosephRing了。前者是一般函数,后者是构造函数
{
        Node* pre = rear, * p = rear->next;
        int count = 1;
        cout << "出环顺序是:";
        while (p->next != p)
        {
                if (count < m) {
                        pre = p; p = p->next;
                        count++;
                }
                else{
                        cout << p->data << "\t";
                        pre->next = p->next;
                        delete p;
                        p = pre->next;
                        count = 1;
                }
        }
        cout << p->data << "\t";
        delete p;
        rear = NULL;
}
int main()
{
        int n, m;
        cout << "请输入约瑟夫环的长度是:";
        cin >> n;
        cout << "请输入密码";
        cin >> m;
        JosephRing R(n);
        R.Joseph(m);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-26 15:08:57 | 显示全部楼层    本楼为最佳答案   
第52行,你把函数名写错了,把Joseph写成JosephRing了。前者是一般函数,后者是构造函数
#include<iostream>
using namespace std;

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

class JosephRing
{
public:
        JosephRing();
        JosephRing(int n);
        ~JosephRing();
        void Joseph(int m);
private:
        Node* rear;
};
JosephRing::JosephRing()
{
        rear = NULL;
}

JosephRing::JosephRing(int n)
{
        Node* s = NULL;
        rear = new Node;
        rear->data = 1; rear->next = rear;
        for (int i = 2; i <= n; i++)
        {
                s = new Node; s->data = i;
                s->next = rear->next;
                rear->next = s;
                rear = s;
        }
}
JosephRing :: ~JosephRing()
{
        if (rear != NULL) {
                Node* p = rear->next;
                while (rear->next != rear)
                {
                        rear->next = p->next;
                        delete p;
                        p = rear->next;
                }
                delete rear;
        }
}

void JosephRing::Joseph(int m)//你把函数名写错了,把Joseph写成JosephRing了。前者是一般函数,后者是构造函数
{
        Node* pre = rear, * p = rear->next;
        int count = 1;
        cout << "出环顺序是:";
        while (p->next != p)
        {
                if (count < m) {
                        pre = p; p = p->next;
                        count++;
                }
                else{
                        cout << p->data << "\t";
                        pre->next = p->next;
                        delete p;
                        p = pre->next;
                        count = 1;
                }
        }
        cout << p->data << "\t";
        delete p;
        rear = NULL;
}
int main()
{
        int n, m;
        cout << "请输入约瑟夫环的长度是:";
        cin >> n;
        cout << "请输入密码";
        cin >> m;
        JosephRing R(n);
        R.Joseph(m);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 23:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表