九度 题目1052:找x

来源:互联网 发布:学好java的心得 编辑:程序博客网 时间:2024/05/18 12:03

题目来源:http://ac.jobdu.com/problem.php?pid=1052

1 秒

内存限制:32 兆

特殊判题:

提交:4553

解决:2438

题目描述:

输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。

输入:

测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。

输出:

对于每组输入,请输出结果。

样例输入:
21 30
样例输出:
-1
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int MAXN = 210;int Partition(int* arr, int low, int high){if(low >= high)return low;int i = low, j = high+1;while (i < j){++i;while(arr[i] < arr[low])++i;--j;while(arr[j] > arr[low])--j;if(i < j && arr[i] != arr[j])arr[i] ^= arr[j], arr[j] ^= arr[i], arr[i] ^= arr[j];}if(arr[j] != arr[low])arr[j] ^= arr[low], arr[low] ^= arr[j], arr[j] ^= arr[low];return j;}void Quick_Sort(int* arr, int low, int high){if(low >= high)return ;int mid = Partition(arr, low, high);Quick_Sort(arr, low, mid-1);Quick_Sort(arr, mid+1, high);}void Binary_Search_TargetNum(int* arr, int x, int &index, int low, int high){if(low > high)return ;int iMid = (low + high)>>1;if(arr[iMid] == x){index = iMid;return ;}else if(arr[iMid] > x)Binary_Search_TargetNum(arr, x, index, low, iMid-1);elseBinary_Search_TargetNum(arr, x, index, iMid+1, high);}int main(){int arr[MAXN], b[MAXN], n, i, iData;while (~scanf("%d", &n) && n){for (i = 0; i < n; ++i){scanf("%d", &arr[i]);b[i] = arr[i];}Quick_Sort(b, 0, n-1);scanf("%d", &iData);int index = -1;Binary_Search_TargetNum(b, iData, index, 0, n-1);if(index != -1){for (i = 0; i < n; ++i){if(arr[i] == iData)index = i;}}printf("%d\n", index);}return 0;}


0 0
原创粉丝点击