九度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; else midmid = (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: 1261 User: liangrx06 Language: C Result: Accepted Time:560 ms Memory:956 kb ****************************************************************/
代码2(我的代码):
#include <stdio.h> #define N 10000 int 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: 1261 User: liangrx06 Language: C Result: Wrong Answer ****************************************************************/
编程算法爱好者。