zoukankan      html  css  js  c++  java
  • Dr.Kong的艺术品

      题目

    Dr.Kong设计了一件艺术品,该艺术品由N个构件堆叠而成,N个构件从高到低按层编号依次为1,2,……,N。艺术品展出后,引起了强烈的反映。Dr.Kong观察到,人们尤其对作品的高端部分评价甚多。

    狂热的Dr.Kong一激动,对组成该艺术品的N个构件重新组合,比如:把第6层到第12层的构件搬下来,想一想,然后整体放到剩下构件的第7层下面;过一会儿,又把第2层到第9层的构件搬下来,整体放到剩下构件的第1层下面等等。于是,Dr.Kong在进行了连续若干次“搬来搬去”后,还是这N个构件,又诞生了一件新的艺术品。

    编程:请输出新的艺术品最高十层构件的编号。

    【标准输入】 

    第一行: N K       表示构件的总数和“搬来搬去”的总次数

    2~K+1行:A B C      表示要搬动的构件(即从第A层到第B层)整个放在第C层下面;

    如果C等于0,则要搬动的构件将放到最高层。

    【标准输出】

    由十行组成,分别为组成新艺术品的第一层到第十层构件的编号。

    【约束条件】

    1)   10≤N≤20000    1≤k≤1000

    (2)   1≤A≤B≤N,      0≤C≤N-(B-A+1)

    【 样  例 】

     

    标准输入

    标准输出

    13 3

    6 12 1

    2 9 0

    10 13 8

     

    6

    7

    8

    9

    10

    11

    12

    2

    3

    4

    15 2

    4 9 2

    10 13 7

    1

    2

    4

    5

    6

    7

    8

    10

    11

    12

    12 3

    6 10 4

    3 8 1

    7 11 0

    9

    2

    10

    5

    11

    1

    3

    4

    6

    7

     解答

     本道题可用线性表的链式存储结构来解决,其的解题思想是用尾插法建立一个链表head存储数据,查找a节点之前的那个节点和b节点,将a和b之间的这一段数据用链表L单独存储起来(相当于暂时从此链表中删除),然后从删除L之后的head链表中查找c的节点,之后将链表L整体插入到链表head中,最后输出前十个数据即可。

    代码

    #include <iostream>

    #include <malloc.h>

    using namespace std;

    typedef struct node{  

    int data;  

    struct node* next;

    }*LinkList;

    int main()

    {  

      int n,k; 

      int i,j,m;

      int a,b,c;  

      LinkList head,tail,p,q,L,r,s,t;  

      while(cin>>n>>k)  

      {

        head=(LinkList)malloc(sizeof(node));   

        tail=(LinkList)malloc(sizeof(node));

        head->next=NULL;  

        tail=head;   

        for(i=1;i<=n;i++)   

        {    

          p=(LinkList)malloc(sizeof(node));   

          p->data=i;    

          if (i==1)     

            head->next=p;    

          else     

            tail->next=p;    

          tail=p;  

         }   

        tail->next=NULL;     

        for(i=0;i<k;i++)   

        {    

          j=1,m=0; 

          t=L=head;    

          cin>>a>>b>>c;        

          while(j<a)   //查找a前一个节点   

          {     

            L=L->next;     

            j++;    

          }    

          q=L->next;   

          s=q;   

          while(j<b)   //查找b本身   

          {     

            s=s->next;    

            j++;   

          }    

          L->next=s->next;    

          r=t;    

          while(m<c)   //查找c本身   

          {     

            r=r->next;     

            m++;    

          }       

          s->next=r->next;    

          r->next=q;   

        }      

        head=head->next;  

        for(i=0;i<n&&i<10;i++)  

        {    

          cout<<head->data<<endl;    

          head=head->next;  

        }

       }  

    return 0;

    }

  • 相关阅读:
    世界疫情可视化开发(一)
    世界疫情可视化开发(三)-- world.jsp
    团队冲刺5
    课下作业1-扩展阅读
    团队冲刺4
    团队冲刺3
    冲刺个人感想
    团队冲刺开始
    Android Studio Toast(吐司)的基本使用
    GridLayout(网格布局)
  • 原文地址:https://www.cnblogs.com/yazhou/p/3370879.html
Copyright © 2011-2022 走看看