electromechanica 2022-03-20 10:01 采纳率: 73.3%
浏览 32
已采纳

数组a[15],已知其中15个元素大到小排列,用折半查找法找出该数是数组中第几个元素的值

/*思路通过离散数学里迭代的方法,第一个for循环我令(i-1)每次循环后,都自除以2。*/

/*以此来对数组a[15]不断二分为更小的数组,直到每个数组中只剩一个元素。*/

/*在把表达式 (i-1)/2+j*(i+1) 赋值给 t 以后,使用两个break使循环完全终止。*/

/*当将表达式 (i-1)/2+j*(i+1)  +1和 t  +1分别输出,却发现只有 t 值是正确的。*/

/*在使用break跳出循环以后,i 和 j 的值应该停止改变了。当前,它们的表达式应当与 t 相等,但为何不同呢?*/

/*是我对break使用的方法错了吗?*/

#include<stdio.h>
#include<math.h>
int main(void)
{
    int i,j,p,t,n,f;
    int a[15]={666,555,300,277,222,188,155,123,99,77,55,33,22,11,1};
    p=0;f=0;
    scanf("%d",&n);
    for(i=15;i>0;i=(i-1)/2)
    {
        for(j=0;j<pow(2,p);j++)
            if(n==a[(i-1)/2+j*(i+1)])
            {
                t=(i-1)/2+j*(i+1);
                f++;break;break;

            }
        p++;
    }
    if(f==1)
        printf("This number is the %d %dth number in the array.\n",(i-1)/2+j*(i+1)+1,t+1);
    else
        printf("There is no such number.");
    return 0;
}

  • 写回答

1条回答 默认 最新

  • 魔法自动机 2022-03-20 11:39
    关注

    额,你是想用break跳出两个循环吗?如果是要跳出嵌套的循环,同时写两行break是不行,要么用goto,要么用个标记变量。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 3月21日
  • 创建了问题 3月20日

悬赏问题

  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染