zoukankan      html  css  js  c++  java
  • 约瑟夫环动画演示

    #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();
        }
    }
  • 相关阅读:
    uva 147 Dollars
    hdu 2069 Coin Change(完全背包)
    hdu 1708 Fibonacci String
    hdu 1568 Fibonacci
    hdu 1316 How Many Fibs?
    poj 1958 Strange Towers of Hanoi
    poj 3601Tower of Hanoi
    poj 3572 Hanoi Tower
    poj 1920 Towers of Hanoi
    筛选法——素数打表
  • 原文地址:https://www.cnblogs.com/xxxsans/p/13856034.html
Copyright © 2011-2022 走看看