精华内容
下载资源
问答
  • 查找数组元素

    2018-01-01 16:10:05
    =10),输入n个整数构成一个数组,输入整数x,在这个数组查找x是否存在,如果存在,删除x,后面元素依次向前添补空位,并输出删除元素后的数组。如果不存在,输出“Not Found”。定义一个查找函数find(),在数组a中...

    题目:

    编写程序,输入n(1<=n<=10),输入n个整数构成一个数组,输入整数x,在这个数组中查找x是否存在,如果存在,删除x,后面元素依次向前添补空位,并输出删除元素后的数组。如果不存在,输出“Not Found”。定义一个查找函数find(),在数组a中查找x,若找不到函数返回-1,若找到返回x的下标,函数原型如下:int find(int a[], int n, int x); 然后在main()中,先调用函数find(),若查找失败输出“Not Found";若查找成功,则调用上一题中定义的函数del()删除该元素,再调用上一题中的PrintArr()输出删除元素后的数组内容。

    输入:

    输入第一行是一个正整数n(1<=n<=10);第二行是n个整数,构成一个数组;第三行是一个整数x,表示待查找元素。

    输出:

    输出删除元素后的数组,每个元素占4列,右对齐。如果不存在,输出“Not Found”。如果数组中有多个x,只删除下标最小的那个。

    Exemple:

    输入:

    6

    3 6 2 4 7 9

    4

    输出:

       3   6   2   7   9

    My DaiMa:

    #include<stdio.h>
    int find(int a[],int n,int x)  //调用函数用来查找数组a里第几个数和x一样
    {
        int i,flag=-1;  //如果没有数和x一样的话,就返回-1
        for(i=0;i<n;i++)
        {
            if(a[i]==x)
                flag=i;第几个数和x一样就返回这个数的下标 i
        }
        return flag;
    }
    void del(int n,int a[],int flag)  //调用函数用来删除数组中下标为flag的数
    {
        int i;
        for(i=0;i<n;i++)
        {
            if(i>=flag) //由于数组中从第flag数开始的每一个数都变成了它后面的那个数
                a[i]=a[i+1]; //因此这里if的判断里用的是>=号,而且只需要让a[i]=a[i+1]即可
        }
    }
    void PrintArr(int a[],int n)  //调用函数用来重新输出数组a里的数
    {
        int i;
        for(i=0;i<n-1;i++)  //要注意的是这个时候的a数组少了一个数
            printf("%4d",a[i]);  //要注意题目的要求是占4列,右对齐
    }
    int main()
    {
        int a[11],n,i,flag,x;
        scanf("%d",&n);
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
        scanf("%d",&x);
        flag=find(a,n,x);
        if(flag==-1)
            printf("Not Found");  //这是在数组a中没有找到和x相等的数的情况
        else
        {
            del(n,a,flag);
            PrintArr(a,n);
        }
        return 0;
    }

     

    展开全文
  • 二维数组, 二分法查找数组元素下标 快速查找数组最大值 数组作为实参的问题

    1,快速查找最大值和最小值

    # include <stdio.h>
    void main()
    {
    int a[4]  = {12,13,14,15};
    int max = 0,i;
        for(i = 1;i<4;i++)
        {
            if(a[max] < a[i])
            {
                max = i;
            }   
        }
    printf("%d",a[max]);
    getchar();
    }

    2,二分查找

    (输入一个数字,查找是否在数组中存在,有则输出下标,无则输出-1)

    二分查找有一个前提,就是数组是从小到大排列(不嫌别扭的话也可以从大到小)。程序运行的流程,类似于猜数字的游戏,给定一个区间,取中间值,大了则把后面全部排出,小了就把前面的全部排除,搜索范围以每次一半的速度缩小。

    如果我们想把这个东西搞复杂:可以采用随机数,生成一个数组。然后输入任意一个数作为待搜索值,然后将生成的数组进行冒泡排序,最后再进行二分查找。 其实就是尽量把数据从具体的变为抽象的,或者说随机的。

    # include <stdio.h>
    void main()
    {
        int key;
        int a[5] = {1,2,3,4,5};     
        int search(int array[],int len,int key);
        scanf("%d",&key);
        getchar();
        printf("%d",search(a,5,key));
        getchar();
    }
    int search(int array[],int len,int key)
    {
        int start = 0,end = len - 1;
        while(start <= end)
        {
            int mid = (start + end) / 2;
            if(array[mid] == key)
            {
                return mid;
            }else if(array[mid] > key)
            {
                end = mid - 1;      
            }else{
                start = mid + 1;
            }
        }
        return -1;      
    }

    比如现在有一个数组: int a[5] = {1,2,3,4,5}

    数组长度 len = sizeof(a) / sinzof(int) 因为一个int型元素有四个字节,数组长度等于其元素数,也就等于数组的总字节数除以元素的字节数。

    模拟调用: serach(a,5,key); //注意这里的第一个参数直接填就可以了,但是咱函数声明时是 int a[];

    ——————————二维数组———————————–

    1,定义格式
    (1)int a[1][2] 1是行数 2 是列数

    2,一位数组和二维数组中间联系。

    int a[3][4];
    上述代码定义了一个3行4列的数组,共有3×4=12个元素,数组名为a,各元素的取值如下:
    a[0][0], a[0][1], a[0][2], a[0][3]
    a[1][0], a[1][1], a[1][2], a[1][3]
    a[2][0], a[2][1], a[2][2], a[2][3]

    在二维数组中,要定位一个元素,必须给出一维下标和二维下标,就像在一个平面中确定一个点,要知道x坐标和y坐标。例如,a[3][4] 表示a数组第3行第4列的元素。
    二维数组在概念上是二维的,但在内存中地址是连续的,也就是说存储器单元是按一维线性排列的。那么,如何在一维存储器中存放二维数组呢?有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后再顺次放入第二列。
    在C语言中,二维数组是按行排列的。也就是先存放a[0]行,再存放a[1]行,最后存放a[2]行;每行中的四个元素也是依次存放。数组a为int类型,每个元素占用4个字节,整个数组共占用4×(3×4)=48个字节。

    二维数组的初始化:

    二维数组的初始化可以按行分段赋值,也可按行连续赋值。
    例如对数组a[5][3],按行分段赋值可写为:
    int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };

    按行连续赋值可写为(这是二维数组初始化特殊的地方:以一维数组的形式赋值):
    int a[5][3]={80, 75, 92, 61, 65, 71, 59, 63, 70, 85, 87, 90, 76, 77, 85}

    这两种赋初值的结果是完全相同的。

    错误写法示范:

    int a[][] = {}; 错
    inta[][4] = {{1,2,3},{2,3,4}…}; 正确
    参考一维数组错误写法:
    int a[] = {} 错
    int a[] = {3} 对
    int a[1] = {3} 对

    对于二维数组初始化赋值还有以下说明
    1) 可以只对部分元素赋初值,未赋初值的元素自动取0值。例如:

    int a[3][3]={{1},{2},{3}};
    是对每一行的第一列元素赋值,未赋值的元素取0值。 赋值后各元素的值为:
    1 0 0
    2 0 0
    3 0 0

    int a [3][3]={{0,1},{0,0,2},{3}};
    赋值后的元素值为:
    0 1 0
    0 0 2
    3 0 0

    2) 如对全部元素赋初值,则第一维的长度可以不给出。例如:
    int a[3][3]={1,2,3,4,5,6,7,8,9};
    可以写为:
    int a[][3]={1,2,3,4,5,6,7,8,9};

    3) 数组是一种构造类型的数据。二维数组可以看作是由一维数组的嵌套而构成的。设一维数组的每个元素都又是一个数组,就组成了二维数组。当然,前提是各元素类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组。C语言允许这种分解。
    如二维数组a[3][4],可分解为三个一维数组,其数组名分别为:a[0]、a[1]、a[2]。
    对这三个一维数组不需另作说明即可使用。这三个一维数组都有4个元素,例如:一维数组a[0]的元素为a[0][0], a[0][1], a[0][2], a[0][3]。必须强调的是,a[0], a[1], a[2]不能当作下标变量使用,它们是数组名,不是一个单纯的下标变量。

    下标取值说明:
    数组a[m][n]中,第一个元素是a[0][0],最后一个元素是a[m-1][n-1].

    关于昨日遗留问题解答:数组作为参数调用函数

    首先在函数声明时,形参列表要设置三个值。
    int search(int array[], int len, int key)
    数组类型与名字 数组长度 搜索元素

    延伸–二维数组的传参问题:

    可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如:

    void Func(int array[3][10]);
    void Func(int array[][10]);
    
    二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的:
    
    void Func(int array[][]);
    
    因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,
    如果在形参中不说明列数,则系统无法决定应为多少行多少列,不能只指定一维而不指定第二维,下面写法是错误的:
    
    void Func(int array[3][]);实参数组维数可以大于形参数组,例如实参数组定义为:
    
    void Func(int array[3][10]);
    
    而形参数组定义为:
    
    int array[5][10];
    
    这时形参数组只取实参数组的一部分,其余部分不起作用。
    

    不用指针的情况下,将二维数组作为实参传参并实现功能,代码很粗糙,贵在其中的规则:

    //二维数组传参时,函数定义时形参列表以及实参传递的形式
    #include<stdio.h>  
    void main()
    {
        void c(int array[3][3]);  //功能函数的声明,注意形参列表的格式
        int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};    //定义二维数组并初始化赋值
        c(a);     //传参调用,主意二维数组作为实参时的写法
        getchar();
    }
    
    void c(int array[3][3])     //功能函数的定义
    {   
        int i,j,max;
        for(i=0;i<3;i++)
        {
            max=array[i][0];
            for(j=1;j<3;j++)
            {
                if(array[i][j]>max)
                {
                    max=array[i][j];
                }
            }
            printf("\n第%d行最大的值是%d:",i+1, max);
         }  
    }
    展开全文
  • Java 二分法查找数组元素

    Java 二分法查找数组元素

    前提

    在Java中使用二分法查找数组元素的前提必须是\color{red}{有序数组},可以是从小到大排序的,也可以是从大到小排序。如果数组不是有序的,那就必须先进行数组排序,再使用二分法查找元素。

    思路

    在第一个元素的下标min和最后一个元素的下标max之间找到中间的一个元素的下标mid(当数组个数为偶数时,mid取(max+min)除以2的商不取余数)。

    当所要找的元素的值等于下标mid的值时,直接查找成功;

    当所要找的元素的值大于下标为mid的值时,那么就在下标mid到下标max之间寻找,这时min就会变为(mid+1),mid也因min的改变而改变;

    当所要找的元素的值小于下标为mid的值时,那么就在下标min到下标mid之间寻找,这时max就会变为(mid-1),mid也因max的改变而改变;

    以此循环,不断二分找到要找的元素。

    当没有查找到时,则返回-1。

    方法实现

    1.先进行数组排序(如果数组无序)

    int[] array = { 1, 43, 6, 213, 67, 3, 49 };
    Arrays.sort(array);
    

    使用Arrays时,须导入java.util.Arrays包;

    2. 算法实现

    public static void main(String[] args) {
    		int[] array = { 1, 43, 6, 213, 67, 3, 49 };
    		Arrays.sort(array);//数组排序,升序
    		int method = method(array, 213);
    		System.out.println(method);
    	}
    	
    	private static int method(int[] array, int value) {
    		int min = 0;//数组的第一个元素下标为0
    		int max = array.length - 1;//数组的最后一个元素下标为数组长度-1
    		while (min <= max) {
    			int mid = (min + max) / 2;//mid没有固定的初始值,是随循环变化的,所以需要放在循环内
    			if (value == array[mid]) {
    				return array[mid];//当所查找的值等于array[mid],返回array[mid]
    			}
    			if (value > array[mid]) {
    				min = mid + 1;//当所查找的值大于array[mid],下标min=mid+1
    			}
    			if (value < array[mid]) {
    				max = mid - 1;//当所查找的值小于array[mid],下标max=mid-1
    			}
    		}
    		return -1;//未查找到相关值,返回-1
    	}
    

    如果有错欢迎留言指出

    展开全文
  • contains(where:)判断数组是否包含复合给定条件的元素 判断所有元素是否符合某个条件 allSatisfy(_:)判断数组的每一个元素都复合给定的条件 //: A UIKit based Playground for presenting user interface ...

    contains(_:)判断是否包含给定元素

    contains(where:)判断数组是否包含复合给定条件的元素

    判断所有元素是否符合某个条件

    allSatisfy(_:)判断数组的每一个元素都复合给定的条件

    //: A UIKit based Playground for presenting user interface
    
    import UIKit
    var array = [Int](6..<20)
    print(array.allSatisfy({$0>=5}))
    
    print(array.allSatisfy({$0<5}))
    

    true

    false

     

    查找元素

    first 返回第一个元素(optional)如果数组为空 返回nil

    last 返回数组最后一个元素 (optional) 如果数组为空,返回nil

    first(while:)返回数组第一个复合给定条件的元素(optional)

    last(while:)返回最后一个符合给定条件的元素(optional)

    //: A UIKit based Playground for presenting user interface
    
    import UIKit
    var array = [10,231,3,123,123,12,312,3,121234,1]
    print(array.first)
    print(array.last)
    print(array.first(where: { $0 > 10 }))
    print(array.last(where: { $0 > 10 }))
    

    结果

    Optional(10)
    Optional(1)
    Optional(231)
    Optional(121234)
    

    查找数组索引

    //: A UIKit based Playground for presenting user interface
    
    import UIKit
    var array = [10,231,3,123,123,10,12,312,3,121234,1]
    print(array.firstIndex(of: 10))
    
    print(array.lastIndex(of: 3))
    
    Optional(0)
    Optional(8)
    

    同样的也适用于条件

    //: A UIKit based Playground for presenting user interface
    
    import UIKit
    var array = [10,231,3,123,123,10,12,312,3,121234,1]
    print(array.firstIndex(where: {$0 > 20}))
    
    print(array.lastIndex(where: {$0 > 20}))
    
    Optional(1)
    Optional(9)
    

    寻找最大元素和最小元素

    //: A UIKit based Playground for presenting user interface
    
    import UIKit
    var array = [10,231,3,123,123,10,12,312,3,121234,1]
    print(array.min())
    print(array.max())
    

    Optional(1)

    Optional(121234)

    对于元祖中的数组如何查找最大最小值呢

    //: A UIKit based Playground for presenting user interface
    
    import UIKit
    var array = [(42,"erro2"),(41,"erro1"),(43,"erro3")]
    print(array.min {a,b in a.0<b.0})
    print(array.max {a,b in a.0<b.0})
    

    Optional((41, "erro1"))

    Optional((43, "erro3"))

    展开全文
  • 二分法查找数组元素

    2021-03-31 17:01:04
    二分法查找数组元素 1、原理: 假设数组是升序排列,利用数组的中间下标将数组分为前后两个子数组,将待查找的数据与中间下标的数据进行比较。若相等,则查找到数据;否则判断待查找的数据与中间下标的数据的大小,...
  • 1117: 查找数组元素

    2020-03-10 20:47:00
    1117: 查找数组元素 时间限制: 1 Sec 内存限制: 128 MB 提交: 11914 解决: 6279 [状态] [讨论版] [提交] [命题人:admin] 题目描述 输入n个整数构成一个数组,在这个数组中查找x是否存在,如果存在,删除x,并输出...
  • 1454: 查找数组元素

    2020-12-05 00:25:23
    1454: 查找数组元素 1.描述 编写程序,输入n(1<=n<=10),输入n个整数构成一个数组,输入整数x,在这个数组中查找x是否存在,如果存在,删除x,后面元素依次向前添补空位,并输出删除元 素后的数组。如果不存在...
  • php 查找数组元素提高效率方法

    万次阅读 2016-01-31 21:22:35
    php查找数组元素是否存在,一般会使用in_array,但对于大数组使用in_array查找元素,效率低下。本文将介绍一种比in_array效率高很多的查找数组元素方法。
  • 1117: 查找数组元素 题目描述 输入n个整数构成一个数组,在这个数组中查找x是否存在,如果存在,删除x,并输出删除元素后的数组。如果不存在,输出“Not Found”。 定义一个查找函数find(),在数组a中查找x,若找不到...
  • 用递归函数实现二分法查找数组元素。  补充:要求给定数组采用如下代码定义  int data[200];  for (i=0; i<200; i++)  data[i]=4*i+6; 输入格式 输入一个待查找的整数(该整数一定在数组data中)。 输出格式...
  • 二分法查找数组元素 要求:数组元素必须有序,从大到小排列,或从小到大按一定的规律进行排列。 利用二分法进行查找。 分析: 这个数组是从小到大进行排列的。数组长度是7,因此所引致的范围是【0,6】。首先将...
  • js查找数组元素位置

    千次阅读 2016-07-04 17:01:12
    js查找数组元素位置 function indexOf(arr, item) { for(var i =0;i;i++){ if(arr[i] == item){ return i } } return -1 }
  • 查找数组元素下标

    2020-05-13 13:24:59
    查找一个数字在数组中的位置,如果没有则输 出没有次数,如数组中有2,4,6,8,10, 输入6,输出6的下标为2 #include"stdio.h" int main() { int a[100],n,x,i;... printf("请输入需要查找数组元素:");
  • 1117: 查找数组元素–python 题目描述: 输入n个整数构成一个数组,在这个数组中查找x是否存在,如果存在,删除x,并输出删除元素后的数组。如果不存在,输出“Not Found”。 定义一个查找函数find(),在数组a中查找x...
  • 查找数组元素 描述 给定一个数组, 快速判断是否出现了某个数. 输入格式 第一行, 一个整数n(1&lt;=n&lt;=100000), 表示数组元素的个数. 第二行, n个int类型整数, 表示数组的元素, 保证按照非递减的顺序...
  • ZZULIOJ【1117】查找数组元素【数组】

    千次阅读 2017-08-03 17:40:53
    1117: 查找数组元素 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 5108 Solved: 2732 SubmitStatusWeb Board Description 编写程序,输入n(1 素后的数组。如果不存在,输出“Not Found”。 ...
  • ZZULIOJ.1117: 查找数组元素

    千次阅读 2018-11-18 12:34:24
    1117: 查找数组元素 题目描述 编写程序,输入n(1&lt;=n&lt;=10),输入n个整数构成一个数组,输入整数x,在这个数组中查找x是否存在,如果存在,删除x,后面元素依次向前添补空位,并输出删除元素后的数组。...
  • python数组查找元素LCM is the lowest multiple of two or more numbers. Multiples of a number are those numbers which when divided by the number leave no remainder. When we are talking about the multiple...
  • link如何查找数组元素并且返回下标号?Select和Where有什么区别?
  •  用递归函数实现二分法查找数组元素。  补充:要求给定数组采用如下代码定义  int data[200];  for (i=0; i<200; i++)  data[i]=4*i+6; 输入格式  输入一个待查找的整数(该整数一定在数组data中)。 输出...
  • c语言 查找数组元素

    千次阅读 2020-03-08 22:12:56
    输入n个整数构成一个数组,在这个数组查找x是否存在,如果存在,删除x,并输出删除元素后的数组。如果不存在,输出“Not Found”。 定义一个查找函数find(),在数组a中查找x,若找不到函数返回-1,若找到返回x的...
  • C语言 二分法查找数组元素

    千次阅读 2020-11-08 20:15:43
    在用二分法进行查找时,查找对象的数组必须是有序的,即各数组元素的次序是按其值的大小顺序存储的。其基本思想是先确定待查数据的范围(可用 [low,high] 区间表示),然后逐步缩小范围直到找到或找不到该记录为止。...
  • 文章目录前言问题描述输入格式输出格式样例输入样例输出数据规模与约定一、 ...用递归函数实现二分法查找数组元素。  补充:要求给定数组采用如下代码定义  int data[200];  for (i=0; i<200; i++)  data[i]=4*
  • 分治法查找数组元素的最大值和最小值(python实现) 实验内容 给定任意几组数据,利用分治法的思想,找出数组中的最大值和最小值并输出 实验原理 利用分治法,将一个数组元素大于 2 的数组分成两个子数组,然后对每...
  • java日常学习:直接查找法和二分法(折半法)查找数组元素
  • 查找数组元素位置

    千次阅读 2019-07-09 20:24:50
    如果数组中存在 item,则返回元素数组中的位置,否则返回 -1 示例1 输入 [ 1, 2, 3, 4 ], 3 输出 2 1.利用arr.indexOf(item),返回arr中第一个item的索引,如果不存在,则返回-1。 function indexOf...
  • =10),输入n个整数构成一个数组,输入整数x,在这个数组查找x是否存在,如果存在,删除x,后面元素依次向前添补空位,并输出删除元 素后的数组。如果不存在,输出“Not Found”。 定义一个查找函数find(),在数组a中...
  • 分治法查找数组元素的最大值和最小值   分治法简介:  分治法从字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或者更多相同或者相似的子问题,再把子问题分成更小的子问题,直到最后子问题可以简单...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,833
精华内容 9,533
关键字:

查找数组元素