• 约瑟夫环动画演示


    #define _CRT_SECURE_NO_WARNINGS
    #include<easyx.h>            // 引用图形库头文件
    #include<iostream>
    #include<string>
    #include<graphics.h>      
    #include<conio.h>
    #include<math.h>
    #define PI 3.1415926
    using namespace std;
    
    char str[10000];
    
    int R = 250;
    int R1 = 320;
    
    typedef struct node
    {
        int num;
        int x;
        int y;
        int r;
        node *next;
    }node, *link;
    
    link create_link(int n);
    void draw_circle(node* head, int n, int m);
    
    int main()
    {
        int n, m;
        cout << "Joseph Ring Game Start!!!" << endl;
        cout << "请输入总人数n和报数值m:" << endl;
        cin >> n >> m;
        initgraph(720, 720);//初始化界面
        setorigin(360, 360);//设置原点
        setfillcolor(BLUE);//设置填充颜色
        settextcolor(WHITE);//设置字体颜色
        draw_circle(create_link(n), n, m);//画环
        return 0;
    }
    
    node* create_link(int n)//建链表
    {
        node *p, *q;
        p = (node*)malloc(sizeof(node));
        p->next = NULL;
        p->next = p;
        p->r = 50;
        for (int i = 1; i <= n; i++)
        {
            q = (node*)malloc(sizeof(node));
            q->num = i;
            q->r = 50;
            q->x = cos(360.0 / n * (i - 1) / 180 * PI)*R;
            q->y = -1 * sin(360.0 / n * (i - 1) / 180 * PI)*R;
            q->next = p->next;
            p->next = q;
        }
        return p;
    }
    
    void print_index(int n)//打印圆编号
    {
        node *p1, *q1;
        p1 = (node*)malloc(sizeof(node));
        p1->next = NULL;
        p1->next = p1;
        for (int i = 1; i <= n; i++)
        {
            q1 = (node*)malloc(sizeof(node));
            q1->num = i;
            q1->x = cos(360.0 / n * (i - 1) / 180 * PI)*R1;
            q1->y = -1 * sin(360.0 / n * (i - 1) / 180 * PI)*R1;
            q1->next = p1->next;
            p1->next = q1;
        }
        p1 = p1->next;
        for (int i = 0; i < n; i++)
        {
            TCHAR b[100];
            _stprintf(b, _T("%d"), p1->num);
            outtextxy(p1->x, p1->y, b);
            p1 = p1->next;
        }
    }
    
    void draw_circle(node* z, int n, int m)//画环
    {
        node*p = z;
        int j = 0;
    
        while (p->next != z)
        {
            j++;
            p = p->next;
        }
    
        //删除头结点
        node *q = p->next;
        p->next = q->next;
        free(q);
    
        while (1)
        {
            for (int i = 0; i < j; i++)//打印圆
            {
                fillcircle(p->x, p->y, p->r);
                p = p->next;
            }
    
            print_index(n);//打印圆编号
    
            for (int i = 0; i < m - 1; i++) //移动到删除节点位置        
            {
                p = p->next;
    
                setfillcolor(RED);
                fillcircle(p->x, p->y, p->r);
                Sleep(500);
                setfillcolor(BLUE);
                fillcircle(p->x, p->y, p->r);
            }
            if (j == 1)//打印结果
            {
                TCHAR s[] = _T("最后一个圆的位置是");
                TCHAR a[100];
                outtextxy(-60, 0, s);
                _stprintf(a, _T("%d"), p->num);
                outtextxy(0, 20, a);
                cout << endl;
                _getch();
                break;
            }
    
            //删除节点
            node *q = p->next;
            p->next = q->next;
            free(q);
            j--;
    
            Sleep(600);
            getbkcolor();
            cleardevice();
        }
    }
    #define _CRT_SECURE_NO_WARNINGS
    #include<easyx.h>            // 引用图形库头文件
    #include<iostream>
    #include<string>
    #include<graphics.h>      
    #include<conio.h>
    #include<math.h>
    #define PI 3.1415926
    using namespace std;
    
    char str[10000];
    
    int R = 250;
    int R1 = 320;
    
    typedef struct node
    {
        int num;
        int x;
        int y;
        int r;
        node *next;
    }node, *link;
    
    link create_link(int n);
    void draw_circle(node* head, int n, int m);
    
    int main()
    {
        int n, m;
        cout << "Joseph Ring Game Start!!!" << endl;
        cout << "请输入总人数n和报数值m:" << endl;
        cin >> n >> m;
        initgraph(720, 720);//初始化界面
        setorigin(360, 360);//设置原点
        setfillcolor(BLUE);//设置填充颜色
        settextcolor(WHITE);//设置字体颜色
        draw_circle(create_link(n), n, m);//画环
        return 0;
    }
    
    node* create_link(int n)//建链表
    {
        node *p, *q;
        p = (node*)malloc(sizeof(node));
        p->next = NULL;
        p->next = p;
        p->r = 50;
        for (int i = 1; i <= n; i++)
        {
            q = (node*)malloc(sizeof(node));
            q->num = i;
            q->r = 50;
            q->x = cos(360.0 / n * (i - 1) / 180 * PI)*R;
            q->y = -1 * sin(360.0 / n * (i - 1) / 180 * PI)*R;
            q->next = p->next;
            p->next = q;
        }
        return p;
    }
    
    void print_index(int n)//打印圆编号
    {
        node *p1, *q1;
        p1 = (node*)malloc(sizeof(node));
        p1->next = NULL;
        p1->next = p1;
        for (int i = 1; i <= n; i++)
        {
            q1 = (node*)malloc(sizeof(node));
            q1->num = i;
            q1->x = cos(360.0 / n * (i - 1) / 180 * PI)*R1;
            q1->y = -1 * sin(360.0 / n * (i - 1) / 180 * PI)*R1;
            q1->next = p1->next;
            p1->next = q1;
        }
        p1 = p1->next;
        for (int i = 0; i < n; i++)
        {
            TCHAR b[100];
            _stprintf(b, _T("%d"), p1->num);
            outtextxy(p1->x, p1->y, b);
            p1 = p1->next;
        }
    }
    
    void draw_circle(node* z, int n, int m)//画环
    {
        node*p = z;
        int j = 0;
    
        while (p->next != z)
        {
            j++;
            p = p->next;
        }
    
        //删除头结点
        node *q = p->next;
        p->next = q->next;
        free(q);
    
        while (1)
        {
            for (int i = 0; i < j; i++)//打印圆
            {
                fillcircle(p->x, p->y, p->r);
                p = p->next;
            }
    
            print_index(n);//打印圆编号
    
            for (int i = 0; i < m - 1; i++) //移动到删除节点位置        
            {
                p = p->next;
    
                setfillcolor(RED);
                fillcircle(p->x, p->y, p->r);
                Sleep(500);
                setfillcolor(BLUE);
                fillcircle(p->x, p->y, p->r);
            }
            if (j == 1)//打印结果
            {
                TCHAR s[] = _T("幸存者是");
                TCHAR a[100];
                outtextxy(-27, 0, s);
                _stprintf(a, _T("%d"), p->num);
                outtextxy(0, 20, a);
                cout << endl;
                _getch();
                break;
            }
    
            //删除节点
            //setfillcolor(RED);
            /*q->r*=1.5;
            while (q->r>q->r*0.1) {
                q->r*0.8;
            }*/
    
            node *q = p->next;
            p->next = q->next;
            free(q);
            j--;
    
            Sleep(600);
            getbkcolor();
            cleardevice();
        }
    }
  • 相关阅读:
    %zsy %lqs 随感
    polynomial&generating function学习笔记
    PKUWC2020自闭记
    考前最后的感叹:CSP2019 Bless All! & AFO
    AFO
    NOI2019 Fe
    [十二省联考2019]骗分过样例 luoguP5285 loj#3050
    python异常处理,草稿
    python操作excel
    python网络编程(requests)
  • 原文地址:https://www.cnblogs.com/xxxsans/p/13856034.html
Copyright © 2020-2023  润新知