已知一个从小到大排列的数组,这个数组中的一个平台就是连续的一串值相同的元素,并且这一串元素不能再延伸. 例如,在1,2,2,3,3,3,4,5,5,6中1和2,2和3,3,3和4和5,5和6都是平台. 试编写一个程序,接收一个数组,把这个数组的最长平台找出来.在上面的3,3,3就是最长平台.
----------------------------------------------------------------------------------
方法1:
#include <stdio.h> int main(void) { int a[] = {1,1,1,1,2,2,3,3,8,3,4,4,5,6,7,7,7,7,7,8,8,8}; int max = 1; //记录当前最长平台长度. int value_of_max = a[0]; //当前最长平台的值. int now = 1; //记录现在平台长度. int i=0; //循环变量. int n = sizeof(a)/sizeof(int); //数组长度
for(i=0; i<n-1; i++) //循环遍历数组一次 { if(a[i+1] == a[i]) //若下一个元素和当前元素相同 { now += 1; //当前平台长度加1 if(i==n-2 && now>max)//倒数第2个元素和倒数第1个元素相同 { max = now; value_of_max = a[i]; } } else { if(now > max) { max = now; value_of_max = a[i]; } now = 1; } } printf("最长平台:%d 长度:%d\n",value_of_max,max); return 0; }
|
方法2:
#include <stdio.h> int longest_plateau(int x[], int n) { int length = 1; /* plateau length >= 1. */ int i;
for (i = 1; i < n; i++) if (x[i] == x[i-length]) length++; return length; } int main(void) { int x[] = { 3, 4, 4, 7, 8, 9, 9, 9, 9, 10}; int n = sizeof(x)/sizeof(int); int i, longest_plateau(int [], int);
printf("\nLongest Plateau Computation Program"); printf("\n==================================="); printf("\n\nThe Given Array :"); for (i = 0; i < n; i++) printf("%5d", x[i]); printf("\n\nLength of the Longest Plateau is %d", longest_plateau(x, n));
return 0; }
|
阅读(842) | 评论(0) | 转发(0) |