(白書訓練計劃)UVa 120 Stacks of Flapjacks(構造法),stacksflapjacks

來源:互聯網
上載者:User

(白書訓練計劃)UVa 120 Stacks of Flapjacks(構造法),stacksflapjacks

題目地址:UVa 120

水題。從最大的開始移,每次都把大的先翻到最上面,再翻到下面。

代碼如下:

#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <queue>#include <map>#include <set>#include <algorithm>using namespace std;int a[500], b[500], d[500];int main(){    int i, j, flag, cnt, n, x, m;    while(scanf("%d",&a[0])!=EOF)    {        b[a[0]]=0;        d[0]=a[0];        i=1;        cnt=0;        while(getchar()!='\n')        {            scanf("%d",&a[i]);            d[i]=a[i];            b[a[i]]=i;            i++;        }        n=i;        m=n;        for(i=0; i<n; i++)        {            printf("%d",a[i]);            if(i!=n-1)                printf(" ");        }        printf("\n");        sort(d,d+n);        while(n--)        {            if(b[d[n]]==n)                continue ;            if(b[d[n]]!=0)            {                x=b[d[n]];                printf("%d ",m-x);                for(i=0; i<=x; i++)                {                    b[a[i]]=x-b[a[i]];                }                for(i=0; i<=x/2; i++)                {                    int t=a[i];                    a[i]=a[x-i];                    a[x-i]=t;                }            }            for(i=0; i<=n; i++)            {                b[a[i]]=n-b[a[i]];            }            for(i=0; i<=n/2; i++)            {                int t=a[i];                a[i]=a[n-i];                a[n-i]=t;            }            printf("%d ",m-n);        }        printf("0\n");    }    return 0;}



Stacks of Flapjacks: python編程問題(看好了是python,不是C++)

ACM ?

思路如下:
比如有5個:15243
1、判斷最大的數(5)在第幾個(2)。 (很遺憾list沒有find或者getitem方法,得寫一個小函數,2、3行)
2、從刀插進去,將該數放到頂 13425 (get slice方法)
3、刀從第一個插,該數到底 52431 (用 list.reverse())
4、判斷第二大的數(4)在第幾個,重複2~3,最後得到54321…… (一開始是一個迴圈,for i in range(len(list),0,-1))

現在系統沒有python……明天看看能不能把程式寫出來……

===============================11月23日更新 18:47==================

吼吼!下了個pythonportable~ 可以隨時py了
修正一下,list有index這個方法……
程式如下:

def analyze(Mylist):
  sequence=[] #初始化排序方法
  for i in range(len(Mylist),0,-1): #逆序將餅排到底
    if Mylist[len(Mylist)-i] == i :
      pass #如果第i各就是i的話就不排序跳到下一個數
    else :
      sequence.append(Mylist.index(i)+1) #記錄下翻轉方法,python從0開始而本題中從1開始
      print "sequence = ",sequence
      tempslice=Mylist[Mylist.index(i):] #取出後部分,即從數為I處切
      tempslice.reverse() #翻轉
      Mylist[-len(tempslice):]=tempslice
      print Mylist
      sequence.append(len(Mylist)-i)
      print "sequence = ",sequence
      tempslice=Mylist[len(Mylist)-i:]
      tempslice.reverse() #翻轉
      Mylist[-len(tempslice):]=tempslice
   &n......餘下全文>>
 
Stacks of Flapjacks 是python的 不是C++

俺倒要瞧瞧是否真有人能看懂...
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.