游客 Signup | Login
中文 | En

2222 - a1001

已知一个长度为10且已经按照从小到大排序的整形数组,要求对于输入的每一个整数,判断该数在数组中的位置并且输出。如果数组中不存在这个数,输出error.


Input

输入10个数,顺序从小到大,输入一个n ,n代表随后要查找n次,随后输入n个要查找的数。

Output

输出查找的结果。

Examples

Input

1 2 3 4 5 6 7 8 9 10
5
1
4
7
8
11

Output

1
4
7
8
error

Solution C

#include<stdio.h>
int main()
{
    int n,a[10],i,b,low,high,mid;
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    while(~scanf("%d",&n))
        {
            while(n--)
            {
                scanf("%d",&b);
                low=1;high=9;
                if(b==a[0])
                    printf("1\n");
                else
                {
                    while(low<=high)
                    {
                        mid=(low+high)/2;
                        if(a[mid]==b)
                        {printf("%d\n",mid+1);break;}
                        else if(a[mid]>b)
                            high=mid-1;
                        else low=mid+1;
                    }
                }
                if(low>high)
                    printf("error\n");
             }
        }
        return 0;
}

Solution C++

#include<iostream>

using namespace std;

int a[15];
int flag;

int zb(int n){
    int left,right,mid;
    left = 1;
    right = 10;
    //mid = (left + right) / 2;
    while(left <= right){
        int mid = (left + right) / 2;
        if(a[mid]<n){
            left = mid + 1;
        }
        else if(a[mid]>n){
            right = mid - 1;
        }
        else
            return mid;
        //cout<<left<<' '<<right<<' '<<mid<<endl;
    }
    flag = 0;
    //cout<<flag<<endl;
    return -1;
}

int main(){
    for(int i=1;i<11;i++)
        cin>>a[i];
    int n;
    cin>>n;
    while(n--){
        flag = 1;
        int m;
        cin>>m;
        //cout<<flag<<endl;
        int x = zb(m);
        if(!flag)
            cout<<"error"<<endl;
        else
            cout<<x<<endl;
    }
    return 0;
}

Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题