PTA 7-5 帶密碼的約瑟夫問題


7-5 帶密碼的約瑟夫問題

帶密碼的約瑟夫問題:編號為1,2,......,n的n個人按照順時針方向圍坐一圈,每個人有自己的編號(正整數)、姓名和密碼(正整數)三個數據項。一開始任選一個正整數作為報數上限值,從第一個人開始順時針方向自1開始報數,報到m時停止報數。報m 的人出列,將他的密碼作為新的m值,從他在順時針方向的下一個人開始重新報數,如此下去,直到所有人全部出隊為止。設計一個程序來求出出隊順序。

輸入格式:

輸入人數 n(1≤n≤50),再逐行輸入每個人的信息(各項之間用逗號隔開),然后輸入報數上限值m。

輸出格式:

按出隊順序逐行輸出每個人的信息,每人信息一行,數據項之間用逗號隔開

輸入樣例:

在這里給出一組輸入。例如:

5
1,劉三,3
2,李麗,5
3,吳勇,8
4,錢多,2
5,齊民,4
2

輸出樣例:

在這里給出相應的輸出。例如:

2,李麗,5
3,吳勇,8
5,齊民,4
4,錢多,2
1,劉三,3結尾無空行

為了完成數據結構報告寫出來的東西

#include<iostream>
#include<iomanip>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>

using namespace std;

typedef struct MyList
{
    int num;
    char name[10];
    int code;
    struct MyList *next;
}MyList,*List;

int main()
{
    List L;
    L=(List)malloc(sizeof(MyList));
    L->next=NULL;
    int n,ciallo1,ciallo3;
    char ciallo2[10];
    List a=L,b;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        b=(List)malloc(sizeof(MyList));
        scanf("%d,%[^,],%d", &ciallo1, ciallo2, &ciallo3);
        b->num=ciallo1;
        strcpy(b->name,ciallo2);
        b->code=ciallo3;
        b->next=NULL;
        a->next=b;
        a = b;
    }
    b->next=L;

    int m=0;
    cin>>m;
    int count=0;

    List c=L;
    while(count<n)
    {

        for(int i=0;i<m;i++)
        {
            c=c->next;
            while(c==L||c->num==0)
            {
                c=c->next;
            }
        }
        cout<<c->num<<","<<c->name<<","<<c->code;
        if(count!=n-1)
        {
            cout<<"\n";
        }
        c->num=0;
        m=c->code;
        count++;
    }

    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM