<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      木塊問題(The Blocks Problem,Uva 101)

      不定長數組:vector

      vector就是一個不定長數組。不僅如此,它把一些常用操作“封裝”在了vector類型內部。 例如,若a是一個vector,可以用a.size( )讀取它的大小,a.resize( )改變大小,a.push_back( )向 尾部添加元素,a.pop_back( )刪除最后一個元素。

      vector是一個模板類,所以需要用vectora或者vectorb這樣的方式來聲明一 個vector。Vector是一個類似于inta[]的整數數組,而vector就是一個類似于 stringa[ ]的字符串數組。vector看上去像是“一等公民”,因為它們可以直接賦值,還可以作為 函數的參數或者返回值,而無須像傳遞數組那樣另外用一個變量指定元素個數。(n=strlen(a);)

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      木塊問題(The Blocks Problem,Uva 101)

      從左到右有n個木塊,編號為0~n-1,要求模擬以下4種操作(下面的a和b都是木塊編 號)。

      • move a onto b: 把a和b上方的木塊全部放回初始的位置,然后把a放到b上面
      • move a over b: 把a上方的木塊全部放回初始的位置,然后把a放在b所在木塊堆的最上方
      • pile a onto b: 把b上方的木塊部放回初始的位置,然后把a和a上面所有的木塊整體放到b上面
      • pile a over b: 把a和a上面所有的木塊整體放在b所在木塊堆的最上方

      一組數據的結束標志為"quit",如果有非法指令(a和b在同一堆),應當忽略。

      輸出:所有操作輸入完畢后,從左到右,從下到上輸出每個位置的木塊編號。

      #include<iostream>
      #include<cstdio>
      #include<string>
      #include<vector>
      using namespace std;
      int n;
      vector<int> pile[30];
      void find_block(int x,int &xp,int &j){
          for(int i=0;i<n;i++){
              for(j=0;j<pile[i].size();j++){
                  if(pile[i][j]==x) {
                      xp=i;
                      return;    
                  }
              }
          }
      }
      //把第p堆高度為h的木塊上方的所有木塊移回原位
      void clear_above(int p,int h){
          for(int i=h+1;i<pile[p].size();i++){
              int x=pile[p][i];
              pile[x].push_back(x);
          }
          pile[p].resize(h+1);
      }
      //把第p堆高度為h及其上方的木塊整體移動到p2 堆的頂部
      void pile_onto(int p,int h,int p2){
          for(int i=h;i<pile[p].size();i++){
              pile[p2].push_back(pile[p][i]);
          }
          pile[p].resize(h);
      }
      //print
      void print(){
          for(int i=0;i<n;i++){
              printf("%d:",i);
              for(int j=0;j<pile[i].size();j++) printf(" %d",pile[i][j]);
              printf("\n");
          }
      }
      int main(){
          int a,b;
          string s1,s2;
          cin>>n;
          for(int i=0;i<n;i++) pile[i].push_back(i);
          while(1){
              cin>>s1;
              if(!s1.compare("quit")) break;
              cin>>a>>s2>>b;
              int pa,pb,ha,hb;
              find_block(a,pa,ha);
              find_block(b,pb,hb);
              if(pa==pb) continue;//在同一堆,忽略
              if(!s2.compare("onto")) clear_above(pb,hb);
              if(!s1.compare("move")) clear_above(pa,ha);
              pile_onto(pa,ha,pb);
          }
          print();
          return 0;
      }

      數據結構的核心是vectorpile[maxn],所有操作都是圍繞它進行的。vector就像一個 二維數組,只是第一維的大小是固定的(不超過maxn),但第二維的大小不固定。上述代碼 還有一個值得學習的技巧:輸入一共有4種指令,但如果完全獨立地處理各指令,代碼就會 變得冗長而且易錯。更好的方法是提取出指令之間的共同點,編寫函數以減少重復代碼。

      vector頭文件中的vector是一個不定長數組,可以用clear( )清空,resize( ) 改變大小,用push_back( )和pop_back( )在尾部添加和刪除元素,用empty( )測試是否為 空。vector之間可以直接賦值或者作為函數的返回值,像是“一等公民”一樣。

      posted @ 2019-02-21 19:30  芩溪兒  閱讀(557)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 蜜桃成熟色综合久久av| 欧美 喷水 xxxx| 摸丰满大乳奶水www免费| 亚洲天堂av免费在线看| 日本视频一区二区三区1| 久久久久国产一区二区| 日本一区二区不卡精品| 性色欲情网站iwww九文堂| 花莲市| 日韩有码中文字幕一区二区 | 内射毛片内射国产夫妻| 欧美成人精品| 国产精品久久久久久久网| 午夜射精日本三级| 女人香蕉久久毛毛片精品| 男女xx00上下抽搐动态图| 拍真实国产伦偷精品| 国产亚洲精品自在久久vr| 伊人久久精品无码麻豆一区| 丝袜高潮流白浆潮喷在线播放| 亚洲女同精品久久女同| 国产成人精彩在线视频50| 亚洲二区中文字幕在线| 亚洲精品久久无码av片软件| 亚洲熟女国产熟女二区三区| 亚洲中文精品一区二区| 韩国精品福利视频一区二区| 欧美肥妇毛多水多bbxx| 人妻精品无码一区二区三区| XXXXXHD亚洲日本HD| 亚洲国产精品成人无码区| 色悠悠国产在线视频一线| av色蜜桃一区二区三区| 国产精品久久久久久久专区| 一区二区三区自拍偷拍视频| 天天做天天爱夜夜爽| 亚洲综合久久精品国产高清| 国产高潮刺激叫喊视频| 国产一区二区日韩在线| 国产在线一区二区在线视频| 精品国产成人一区二区|