本文主要是介绍九度OJ 1261:寻找峰值点 (基础题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 题目描述:
-
给定一个整数序列,该整数序列存在着这几种可能:先递增后递减、先递减后递增、全递减、全递增。
请找出那个最大值的点。
- 输入:
-
输入的第一行包括一个整数N(1<=N<=10000)。
接下来的一行是N个满足题目描述条件的整数。
- 输出:
-
可能有多组测试数据,对于每组数据,
输出这N个数中最大的那个数。
- 样例输入:
-
5 1 2 3 2 1
- 样例输出:
-
3
思路:
遍历求最大值不就行吗?
结果WA。我认为判题有问题。
附上能AC的代码和我的代码。
代码1(能AC的代码):
#include<stdio.h>int num[11000];int max(int x, int y)
{return x>y ? x : y;
}int TriSearch(int *num, int n, int left, int right)
{int mid=0, midmid;while(left < right){if(left+1 == right) return max(num[left],num[right]);mid = (left+right)/2;if(mid+1 == right)midmid = (mid+right)/2+1;elsemidmid = (mid+right)/2;if(midmid == right)return max(num[left], max(num[mid], num[right]));if(num[mid] >= num[midmid]) right = midmid;else left = mid;}return num[mid];
}int main()
{int n;while(scanf("%d", &n) != EOF){for(int i=0; i<n; i++)scanf("%d", &num[i]);int ans = TriSearch(num, n, 0, n-1);printf("%d\n", ans);}
}
/**************************************************************Problem: 1261User: liangrx06Language: CResult: AcceptedTime:560 msMemory:956 kb
****************************************************************/
代码2(我的代码):
#include <stdio.h>#define N 10000int main(void)
{int n, i, max;int a[N];while (scanf("%d", &n) != EOF){;for(i=0; i<n; i++){scanf("%d", &a[i]);if (i == 0)max = a[0];else if (a[i] > max)max = a[i];}printf("%d\n", max);}return 0;
}
/**************************************************************Problem: 1261User: liangrx06Language: CResult: Wrong Answer
****************************************************************/
这篇关于九度OJ 1261:寻找峰值点 (基础题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!