回 帖 发 新 帖 刷新版面

主题:跪求各位大哥帮帮忙写个程序参考一下啊`线性储存问题的

2    问题描述
有n个同学一起玩游戏(10≤n≤99),大家围成一圈,依靠学号来区分同学,从某一个同学(编号为a)开始数数,遇到7的倍数或者包含7的数(比如17,27),则该同学退出圈外,请求解同学们退出的顺序(用学号表示)。
2.1    基本要求
(1)    同学的总人数n可变(10≤n≤99),开始位置a可变(1≤a≤n);
(2)    用两种线性表的存储结构来分别表示围成圈的同学和退出顺序。比如,可以用循环链表或者双链表表示围成的圈,用顺序表(一位数组)来存储退出的同学学号的顺序;
(3)    同学的学号可以用简单1,2,3,…,M编号;
(4)    文档中,对算法的时间复杂度和空间复杂度进行分析,判断复杂度与n之间的关系。
(5)    绘制算法的流程图。
谢谢各位大哥了~~真心祝福你们天天好心情`:)谢谢!

回复列表 (共4个回复)

沙发


作业自己做!!!!!
[em1][em1][em1][em1][em1][em1][em1][em1][em1]

板凳

约瑟夫斯环

3 楼


北邮世纪的吧

4 楼

#include <stdio.h>
typedef struct node{
    int data;
    struct node *link;
}LNode,*LinkList;

int b[99];
int *game (int n,int a)
{
    LinkList list=NULL,p,r;
    int i;
    for (i=1;i<=n;i++)                //构造一个n个节点的循环链表
    {
        p=new LNode;
        p->data=i;
        if (list==NULL)
            list=p;
        else
            r->link=p;
        r=p;
    }
    p->link=list;
    p=list;                            //查找编号为a的同学
    for (i=1;i<a;i++)
    {
        r=p;
        p=p->link;
    }
    i=1;
    int k=0;
    while (p->link!=p)
    {
        if (i%7==0||i%10==7||i/10==7)
        {
            r->link=p->link;
            b[k++]=p->data;
            delete (p);
            p=r->link;
            i++;
        }
        else
        {
            r=p;
            p=p->link;
            i++;
        }
    }
    b[k]=p->data;
    return b;
    
}
void main ()
{
    int n,a;
    printf ("please input the total of students:");
    scanf ("%d",&n);
    printf ("please input the number of beginning:");
    scanf ("%d",&a);
    int *c=game(n,a);
    for (int i=0;i<n;i++)
        printf ("%d,",c[i]);

}

我来回复

您尚未登录,请登录后再回复。点此登录或注册