軟體工程課堂訓練——結對開發之環數組最大和

來源:互聯網
上載者:User

標籤:

一、題目及要求:

      題目:返回一個整數數組中最大子數組的和

      要求(新加):①如果數組A[0]...A[j-1]首尾相鄰,允許A[i-1]...A[n-1],A[0]...A[j-1]之和最大;②同時返回最大子數組的位置。

      結對人員:胡亞寶  焦燕

二、設計思路:

      我們要解決兩個問題:求出環數組中最大的子數組;並且定位出該子數組的位置,把它們的名稱輸出來。要解決這兩個問題,我們從以下兩個方面入手:

      ①求出最大子數組:將數組數值按順序排好稱為“一趟”,每求出一趟的最大子數組後,將第一個數值放到最後一個,排成新的一趟,以此類推,直到遍曆完成,求出最大環子數組。

      ②定位子數組:判斷出當前求的和值為負數時,將之捨去,並將該數的下一個數的位置存起來作為最大子數組的頭。當求出最大值後,該數的位置存起來作為子數組的尾。最後輸出將子數組的名稱。

三、原始碼:

1 //結對開發——胡亞寶 焦燕  2  3 #include "stdafx.h" 4  5  6 int _tmain(int argc, _TCHAR* argv[]) 7 { 8     int i,j,k,m,n,o,a[5];  9     int Sum,Max,flag,flag1=0,flag2,flag4;10     11     printf("請輸入5個整數:\n");12     for(k=0;k<5;k++)13     {14         scanf("%d",&a[k]);15     }16     Max = a[0];17     for (m=0;m<5;m++)18     {19         for(i=0;i<5;i++)  20         {  21             Sum = 0;             22             for(j=i;j<5;j++)  23             {  24                 Sum =Sum+ a[j];25                 if(Sum<=0)26                 {27                     Sum=0;28                     flag1=(j+1+m)%5;29                 }30                 if(Sum > Max)  31                 {32                     Max =Sum;  33                     flag2=j+m;    34                 }35             }  36         }  37         flag=a[0];38         for(n=0;n<5;n++)39         {40             a[n]=a[n+1];41         }42         a[4]=flag;43     }44     if(Sum==0)45     {46         47         Max=a[0];48         for(int e=0;e<5;e++)49         {50             if(a[e]>=Max)51             {52                 Max=a[e];53                 flag4=e;54             }55         }56         57     }58     printf("最大連續環子數組的和為:%d\n",Max);59     printf("該最大連續環子數組為:");60 61     if(Sum==0)62     {63         printf("a[%d]",flag4);64     }65     else66     {67         int flag3=flag2-flag1;68         for(o=0;o<=flag3;o++)69         {70             printf("a[%d]\t",flag1);71             flag1++;72             if(flag1>4)73                  flag1=0;74         }75     }76     printf("\n");77     return 0;78 }

四、測試及運行結果:

測試資料:

3 6 -9 0 7(有正數、負數、零)

7 9 3 2 8 (只有正數)

-3 -6 -9 -2 -5(只有負數)

運行結果:

五、心得體會:

      這次實驗我們聽了老師的要求後,兩個人都各自想實現的方法,然後各自說出自己的方法給對方聽,結果兩人說著說著就知道自己的演算法錯誤在哪,缺點在哪。最後我們決定採用張世通同學的方法。

     利用原來的代碼使每求出一趟的最大子數組後,利用for迴圈將第一個數值放到最後一個,排成新的一趟,以此類推,直到遍曆完成,求出最大環子數組;但是在定位時,我們遇到了困難,胡亞寶和我在周六試了一下午才實現。當時特別有成就感,雖然方法是胡亞寶想出來的,但當時特別有成就感。

工作照:

軟體工程課堂訓練——結對開發之環數組最大和

聯繫我們

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