鱼C论坛

 找回密码
 立即注册
查看: 1128|回复: 1

[已解决]还有这个

[复制链接]
发表于 2023-11-21 13:48:40 | 显示全部楼层 |阅读模式
10鱼币
二分查找法。按照从小到大的顺序,输入n个整数并存入数组a中,然后在数组a中查找给定的x。如果数组a中的元素与x的值相同,输出相应的下标(下标从0开始);如果没有找到,输出“Not Found”。如果输入的n个整数没有按照从小到大的顺序排列,或者出现了相同的数,则输出“Invalid Value”。


#include <stdio.h>

# define MAXN 10

int main()

{

  int found, i, left, mid, n, right, sorted, x;

  int a[MAXN];



  scanf("%d %d", &n, &x);

  for(i = 0; i < n; i++){

    scanf("%d", &a[i]);

  }

   

  sorted = 1;

  for(i = 1; i < n; i++){

    if【1】{

               【2】

      break;

    }

  }

  if(sorted == 0){

    printf("Invalid Value\n");

  }else{

    found = 0;

     【3】

    while(left <= right){

                       【4】

      if (x == a[mid]){

                 【5】

        break;

      }else if (x < a[mid]){

                  【6】

      }else{

                 【7】

      }

    }

    if(found != 0){

      printf("%d\n",mid);

    }

    else{

      printf( "Not Found\n");

    }

  }  

   

  return 0;

}
也讲一下,谢谢
最佳答案
2023-11-21 13:48:41
#include <stdio.h>

# define MAXN 10

int main()
{
    int found, i, left, mid, n, right, sorted, x;
    int a[MAXN];

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

    sorted = 1;
    for(i = 1; i < n; i++){
        if(a[ i] < a[i-1]){
            sorted = 0;
            break;
        }
    }

    if(sorted == 0){
        printf("Invalid Value\n");
    }else{
        found = 0;
        left = 0;
        right = n - 1;
        while(left <= right){
            mid = (left + right) / 2;
            if (x == a[mid]){
                found = 1;
                break;
            }else if (x < a[mid]){
                right = mid - 1;
            }else{
                left = mid + 1;
            }
        } 
        if(found != 0){
            printf("%d\n",mid);
        }
        else{
            printf( "Not Found\n");
        }
    }   
    return 0;
}

这是一个使用二分查找法在有序数组中查找指定元素的程序。首先,它会检查输入的n个整数是否按照从小到大的顺序排列,如果没有则输出"Invalid Value"。如果数组是有序的,则使用二分查找法在数组中查找给定的x。如果找到了,就输出相应的下标;如果没有找到,就输出"Not Found"。

最佳答案

查看完整内容

这是一个使用二分查找法在有序数组中查找指定元素的程序。首先,它会检查输入的n个整数是否按照从小到大的顺序排列,如果没有则输出"Invalid Value"。如果数组是有序的,则使用二分查找法在数组中查找给定的x。如果找到了,就输出相应的下标;如果没有找到,就输出"Not Found"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-21 13:48:41 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>

# define MAXN 10

int main()
{
    int found, i, left, mid, n, right, sorted, x;
    int a[MAXN];

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

    sorted = 1;
    for(i = 1; i < n; i++){
        if(a[ i] < a[i-1]){
            sorted = 0;
            break;
        }
    }

    if(sorted == 0){
        printf("Invalid Value\n");
    }else{
        found = 0;
        left = 0;
        right = n - 1;
        while(left <= right){
            mid = (left + right) / 2;
            if (x == a[mid]){
                found = 1;
                break;
            }else if (x < a[mid]){
                right = mid - 1;
            }else{
                left = mid + 1;
            }
        } 
        if(found != 0){
            printf("%d\n",mid);
        }
        else{
            printf( "Not Found\n");
        }
    }   
    return 0;
}

这是一个使用二分查找法在有序数组中查找指定元素的程序。首先,它会检查输入的n个整数是否按照从小到大的顺序排列,如果没有则输出"Invalid Value"。如果数组是有序的,则使用二分查找法在数组中查找给定的x。如果找到了,就输出相应的下标;如果没有找到,就输出"Not Found"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 20:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表