zoukankan      html  css  js  c++  java
  • 击鼓传花



    题目:



    分析:

    这个问题在知道它的规则之后,就可以用循环链表来模拟这个游戏的过程,具体如下:

    1. N个人编号后按顺序围成圈,就相当于是建一个链表,节点存储编号,最后一个节点要指向第一个节点,形成一个环。
    2. 传花的过程就相当于指针移动的过程。
    3. 出局就相当于删除链表的节点。

    最后,只要输出剩下的节点所存储的编号就好了。由于这个游戏中,一号其实是没有存在意义的,因为他在开始前就已经出局了,所以可以不考虑。也就是说可以少加一个节点,少一次删除的操作。



    代码:

    #include<iostream>  
    #include<stdlib.h>  
    
    using namespace std;  
    
    struct Node  
    {  
        int num;  
        Node *next;  
    };  
    
    int main()  
    {  
        Node *head,*p,*newp,*p1;  
        int i,j,n,m;  
    
        cin>>n>>m;  
        head=(Node*)malloc(sizeof(Node)); 
        p=head;  
    
        for(i=1;i<n;i++)  
        {  
            newp=(Node*)malloc(sizeof(Node));  
            newp->num=i+1;  
            p->next=newp;  
            p=p->next;  
        }
        
        p->next=head->next;
        p=head;
        
        for(j=0;j<n-2;j++)  
        {  
            for(i=0;i<m-1;i++)  
                p=p->next;  
            p1=p->next;  
            p->next=p1->next;  
            delete p1;  
        }  
    
        cout<<p->num<<endl;
        
        return 0;  
    }  
    


  • 相关阅读:
    Longest Valid Parentheses
    [转载]ios入门篇 -hello Word(1)
    EXTJS 4 动态grid
    Spring AOP JPA
    Jchart 演示
    HSQLDB JPA GeneratedValue
    Antlr 练习
    回火方程
    URL decode 解决中文目录的乱码问题
    Arduino IIC lcd1602
  • 原文地址:https://www.cnblogs.com/jiuweilinghu/p/5935845.html
Copyright © 2011-2022 走看看