ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数组实现约瑟夫环

2019-08-20 14:09:13  阅读:209  来源: 互联网

标签:cout 实现 void ++ 约瑟夫 int 数组 data con


原文链接:http://www.cnblogs.com/-wang-xin/archive/2012/11/24/2785624.html

/*

任务:

一群小孩围成一圈,任意假定一个数m,从第一个小孩起,顺时针方向数,每数到第m个小孩时,该小孩便离开。

小孩不断离开,圈子不断缩小。最后剩下的一个小孩便是胜者。求胜者的编号?

要求

以面向对象技术进行程序设计

建立环状链表类

程序便于维护与扩张:如易于对小孩数量n和数数间隔m进行变化

改变获胜者数量,使其可设为任意值

可中途增加小孩人数

 

  将数据结构改为数组形式存放,要求尽可能少地修改程序并能够实现上述功能,保留原环链表的实现方式

*/

//类的实现

#include<iostream>

using namespace std;

typedef char ElemType;

#define maxNum 100

class Huan

{

public:

    void setNumber();

    void creat_List();

    void insert();

    void deal();

private:

    int number;//多少人

    int number1;//该数时有人退出

    int winnum;//请输入赢家人数

    int length;

    ElemType *data;

};

void Huan::setNumber()

{

    cout<<"请输入有多少人:"<<endl;

    cin>>number;

    cout<<"请输入一个数表示数到该数时有人退出:"<<endl;

    cin>>number1;

    cout<<"请输入赢家人数:"<<endl;

    cin>>winnum;

}

void Huan::creat_List()

{

    length=0;

    data=new ElemType[maxNum];

    cout<<"请输入相应数据"<<endl;

    for(int i=0;i<number;i++)

        cin>>data[length++];

   

   

}

void Huan::deal()

{

    int tag=0;

    char choice;

    int peopleNum;

    int i=0;

    while(number>winnum)

    {

        if(data[i]!='#')

            tag++;

        if(tag==number1)

        {

            tag=0;

           

            number--;

            data[i]='#';

            cout<<"剩余人数的数据为"<<endl;

            int con=0;

            while(con<length)

            {

                if(data[con]!='#')

                    cout<<data[con]<<'\t';

                con++;

            }

            cout<<endl;

           

           

            cout<<"是否有人插入(Y),人数的个数"<<endl;

            cin>>choice>>peopleNum;

            if(choice=='Y')

            {

                for(int k=0;k<peopleNum;k++)

                {

                    cin>>data[length++];

                    number++;

                    cout<<"剩余人数的数据为"<<endl;

                    int con=0;

                    while(con<length)

                    {

                        if(data[con]!='#')

                            cout<<data[con]<<'\t';

                        con++;

                    }

                    cout<<endl;

                }

               

               

            }

        }

       

        i++;

        if(i==length)

            i=0;

    }

   

    cout<<"赢家的数据为:"<<endl;

    int times=0;

    while(times<length)

    {

        if(data[times]!='#')

            cout<<data[times]<<'\t';

        times++;

    }

    cout<<endl;

}

void main()

{

    Huan xin;

    xin.setNumber();

    xin.creat_List();

    xin.deal();

   

   

}

转载于:https://www.cnblogs.com/-wang-xin/archive/2012/11/24/2785624.html

标签:cout,实现,void,++,约瑟夫,int,数组,data,con
来源: https://blog.csdn.net/weixin_30820151/article/details/99839304

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有