pta7-5 利用二分查找搜寻所有待查找数据

利用二分法在一个有N(N≤20)个元素的有序数列中查找指定值y。找到y后,先输出查找次数,再输出其在数组中对应的下标。若数列中存在多个y,将所有y的位置按下标序号顺序输出;
否则输出“not found”.

输入格式:

输入在第1行中给出1个不大于20的数N。在第2行给出N个数(升序),以空格分隔。最后在第3行给出待查找数据y。

输出格式:

若数列中存在y:先输出查询次数,在其后每行以格式“位置:k”,输出一个位置值。
若数列中没有y:输出“not found”。

输入样例 1:

10
34 56 78 87 87 87 87 112 520 888
87

输出样例 1:

查找次数1
位置:3
位置:4
位置:5
位置:6

输入样例 2:

10
34 56 78 87 87 87 87 112 520 888
80

输出样例 2:

not found

代码如下

#include<stdio.h>
int main()
{
    int n,b,i,j=0,m,g,k,shu=1;
    int a[20];

    scanf ("%d",&n);
    m=0;
    g=n-1;

    for (i=0;i<n;i++)
        scanf("%d",&a[i]);

    scanf("%d",&b);

    while (m<=g)
    {
        k=(m+g)/2;
        if (b==a[k])
        {
            break;
        }
        else if(b<a[k])
            g=k-1;
        else
            m=k+1;
        shu++;
    }

    for (i=0;i<n;i++)
    {
        if (a[i]==b)
        {
            if(j==0)
            {
                printf("查找次数%d\n",shu);
                j=1;
                printf("位置:%d\n",i);
            }
            else
            {
                printf("位置:%d\n",i);
            }
        }
    }
    if (j==0)
        printf("not found");
    return 0;
}

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年12月14日
下一篇 2023年12月14日

相关推荐