最長平台問題 C實現

2021-06-28 07:43:16 字數 2458 閱讀 7890

此問題來自《c語言名題精選百則》

問題1.1最長平台(plateau.c)

已知乙個從小到大排序的陣列,這個陣列中的乙個平台(plateau)是連續的一串值相同的元素,並且這一串元素不能再延伸,例如,在1,2,2,3, 3, 3, 4 ,5 ,5 ,6中1, 2.2, 3.3.3, 4, 5.5, 6都是平台,編寫乙個程式接收乙個陣列,把這個陣列中平台最長的平台找出來,在上面的例子中,3,3,3就是陣列中最長的平台。

需要考慮一下幾點:

1.使用變數越少越好;

2.能否把陣列的元素每乙個都只查一次就得到結果?

3.程式語句越少越好。

我的想法是,用乙個變數儲存最長平台數值,再用乙個變數儲存最長平台長度,函式要返回這兩個數值,就得用結構體

typedef structplateau;

如何計算平台長度?

當當前數值和前乙個數值不相等時,統計前乙個平台的長度,將這個長度和最長平台相比,如果大於最長平台,則將最長平台的數值和長度都儲存為上乙個平台的數值和長度,否則,當前值和前乙個值相等,則將平台的長度+1;

if (arr[i] != arr[i-1] && length > max.num)elseplate;

plate longest_plateau(int a,int n)

{ plate longest;

longest.length = 1;

int data;

int i;

for(i=1;i

執行過程:

longest.length = 1

i=1,      a[i] = a[1] =2 ,

a[i-length] = a[1-1] = a[0] = 1,

a[i] != a[i-longes.tlength]  ,  if裡的語句不執行,longest.ength = 1

i=2,      a[i] = a[2] =2;

a[i-length] = a[2-1] = a[1] = 2,

a[i] = a[i-longes.tlength]  ,  if裡的語句執行,longest.length = longest.length +1 = 2; longest.data = a[i] = a[2] = 2;

i=3,      a[i] = a[3] = 3;

a[i-length] = a[3-2] = a[1] = 2,

a[i] != a[i-longes.tlength]  ,  if裡的語句不執行,longest.length = 2;

i=4,      a[i] = a[4] = 3;

a[i-length] = a[4-2] = a[2] = 2,

a[i] != a[i-longes.tlength]  ,  if裡的語句不執行,longest.length = 2;

i=5,      a[i] = a[5] = 4;

a[i-length] = a[5-2] = a[3] = 3,

a[i] != a[i-longes.tlength]  ,  if裡的語句不執行,longest.length = 2;

i=6,      a[i] = a[6] = 4;

a[i-length] = a[6-2] = a[4] = 3,

a[i] != a[i-longes.tlength]  ,  if裡的語句不執行,longest.length = 2;

i=7,      a[i] = a[7] = 5;

a[i-length] = a[7-2] = a[5] = 4,

a[i] != a[i-longes.tlength]  ,  if裡的語句不執行,longest.length = 2;

i=8,      a[i] = a[8] = 5;

a[i-length] = a[8-2] = a[6] = 4,

a[i] != a[i-longes.tlength]  ,  if裡的語句不執行,longest.length = 2;

i=9,    a[i] = a[9] = 6;

a[i-length] = a[9-2] = a[7] = 5,

a[i] != a[i-longes.tlength]  ,   if裡的語句不執行,longest.length = 2;

i=10,  a[i] = a[10] = 6;

a[i-length] = a[10-2] = a[8] = 5,

a[i] != a[i-longes.tlength]  ,   if裡的語句不執行,longest.length = 2;

i=11,  a[i] = a[11] = 6;

a[i-length] = a[11-2] = a[9] = 6,

a[i] != a[i-longes.tlength]  ,   if裡的語句執行,longest.length = longest.length +1 = 3; longest.data = a[i] = a[11] = 6.

執行結果

最長平台問題

該問題出自 c語言名題精選百則技巧篇 大意是 找出一段有序數字中,找出最長而且連續的數字。比如在1,2,2,3,3,3,4,5,5,6中最長平台即為3,長度也是3。我的 如下 include include int main in order result x 0 int size sizeof x...

最長平台問題

問題 已知乙個已經從小到大排序的陣列,這個陣列中的乙個平台就是連續的一串值相同的元素,並且這一串元素不能再延伸。例如,在1,2,2,3,3,3,4,5,5,6中的1,2.2,3.33,4,5.5,6都是平台。試編寫乙個程式,接受乙個陣列,把這個陣列中的最長平台找出來。在上面的例子中3.3.3就是該陣...

1116 最長平台 c

題目描述 已知乙個已經從小到大排序的陣列,這個陣列的乙個平台 plateau 就是連續的一串值相同的元素,並且這一串元素不能再延伸。例如,在 1,2,2,3,3,3,4,5,5,6中1,2 2,3 3 3,4,5 5,6都是平台。試編寫乙個程式,接收乙個陣列,把這個陣列最長的平台找出來。在上面的例子...