電腦的流處理特性

來源:互聯網
上載者:User

標籤:

問題描述

  有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然後進行下面的遊戲:

  每個小朋友都把自己的糖果分一半給左手邊的孩子。

  一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。

  反覆進行這個遊戲,直到所有小朋友的糖果數都相同為止。

  你的任務是預測在已知的初始糖果情形下,老師一共需要補發多少個糖果。

輸入格式

  程式首先讀入一個整數N(2<N<100),表示小朋友的人數。
  接著是一行用空格分開的N個偶數(每個偶數不大於1000,不小於2)

輸出格式

  要求程式輸出一個整數,表示老師需要補發的糖果數。

範例輸入

3
2 2 4

範例輸出

4

  首先現實世界的模型可以進行簡化。分糖果模型的簡化,假設每個人同時在一瞬間將糖果分成兩份,然後左手送一半,右手再接收一部分。那麼除最後一人外,其他人的糖果都等於自己和右側糖果的均值(注意一定要使用舊值)。最後一個人的糖果等於自己和第一人糖果的均值(注意一定要使用舊值)。如下

  這一段代碼是最關鍵的,雖然很簡單但是容易出錯。原因就在於沒有認識到電腦的流處理特性,什麼是電腦的流處理特性,其實想一靈機就知道了,圖靈機處理的是字元流,電腦也一樣,它的處理方式只能是流的,比如樹的遍曆,圖的遍曆,因為樹和圖不是線性流,所以不能直接處理,只能先遍曆成線性流才能被電腦處理。電腦的這個流處理特性是和現實世界模型衝突的,現實世界中很多事情是同時發生的,電腦不能很好的類比,比如那個螞蟻感冒的問題,現實世界中螞蟻的狀態是同時更新的,如果用電腦處理,那麼只能先跟新一部分螞蟻的狀態,這很顯然會出問題。在本題中小朋友的遊戲過程是一瞬間同時完成的,那麼電腦在類比的時候就要小心了,一定要注意更新資料的先後順序。我的處理方法是先更新第一個人的,他使用的資料是自己原來的糖果數和右邊小朋友原來的糖果數的均值,然後處理第二個人的,他使用的資料均為舊值,以此類推一直到倒數第二個人。最後一個人要單獨處理,他使用自己和第一個人的舊值的均值,但是這個時候第一個人的值已經更新,所以事先要把第一個人的舊值做一個copy。具體實現的代碼如下:

#include<stdio.h>int check(int a[],int n){    for(int i=0;i<n-1;i++)    if(a[i]!=a[i+1]) return 0;    return 1;}main(){    int n;    while(~scanf("%d",&n))    {        int a[100];        int count=0;        for(int i=0;i<n;i++)        scanf("%d",&a[i]);        while(!check(a,n))        {            int t=a[0];            for(int i=0;i<n-1;i++)                a[i]=(a[i]+a[i+1])/2;                a[n-1]=(a[n-1]+t)/2;//注意跟新順序,一定要使用未被跟新的資料             for(int i=0;i<n;i++)            if(a[i]%2)            {                a[i]++;                  count++;            }        }        printf("%d\n",count);    }} 

 

電腦的流處理特性

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.