siqinxiong 2013-09-23 12:17 采纳率: 0%
浏览 845

约瑟夫环代码错误,不知道哪里出了问题

#include
using namespace std;

typedef struct Node
{
int num;
int password;
struct Node *next;
}List;

List *create(int n)
{
List *p, *q, *head;
int i = 1;
head = new List;
p = head;
cout<<"请输入第"< cin>>p->password ;
for(i = 2;i <= n;i++)
{
q = new List;
cout<<"请输入第"< cin>>q->password ;
p->next = q;
p = p->next ;
}
p->next = head;
return head;
}

int output(List *L)
{
int m, i;
List *p = L, *q, *s;
q = p;
cout<<"请输入m的初值"< cin>>m;
cout<<"出列顺序为:"< while(q != NULL)
{
for(i = 1; i {
q = p;
p = p->next ;
}
q->next = p->next;
cout<password < m = p->password;
q = p->next ;
delete(p);
}
return 0;
}

int main()
{
List *L;
int n;
cout<<"请输入实验人数"< cin>>n;
L = create(n);
output(L);
return 0;
}

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-02-19 22:41
    关注

    该回答引用ChatGPT

    这段代码存在一些错误,以下是修复后的代码:

    #include <iostream>
    using namespace std;
    
    typedef struct Node {
        int num;
        int password;
        struct Node* next;
    } List;
    
    List* create(int n) {
        List* p, * q, * head;
        int i = 1;
        head = new List;
        p = head;
        cout << "请输入第" << i << "个人的密码: ";
        cin >> p->password;
        for (i = 2; i <= n; i++) {
            q = new List;
            cout << "请输入第" << i << "个人的密码: ";
            cin >> q->password;
            p->next = q;
            p = p->next;
        }
        p->next = head;
        return head;
    }
    
    int output(List* L) {
        int m, i;
        List* p = L, * q, * s;
        q = p;
        cout << "请输入m的初值: ";
        cin >> m;
        cout << "出列顺序为:";
        while (q->next != q) {
            for (i = 1; i < m; i++) {
                s = q;
                q = p;
                p = p->next;
            }
            s->next = p->next;
            cout << p->num << " ";
            m = p->password;
            q = p->next;
            delete (p);
            p = q;
        }
        cout << q->num << endl;
        return 0;
    }
    
    int main() {
        List* L;
        int n;
        cout << "请输入实验人数: ";
        cin >> n;
        L = create(n);
        for (int i = 1; i <= n; i++) {
            L->num = i;
            L = L->next;
        }
        output(L);
        return 0;
    }
    

    这里列出了几个问题和修改方法:

    • 在 create 函数中,输入人员密码时,输出提示信息中应该是 i 而不是 <。

    • 在 output 函数中,应该将 q != NULL 修改为 q->next != q,否则最后一个节点不会被处理。

    • 在 output 函数中,每次删除一个节点后,应该将 p 指向下一个节点,而不是 q->next,因为在下一次循环中需要从 p 开始计数。

    • 在 main 函数中,应该在创建链表时为每个节点的 num 属性赋值。

    评论

报告相同问题?

悬赏问题

  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式