Day5:查找

例5.1查找第k小數(shù)

時(shí)間限制:1s 空間限制:64M

題目描述

查找一個(gè)數(shù)組的第K小的數(shù),注意同樣大小算一樣大。 如 2 1 3 4 5 2 第三小數(shù)為3。

輸入描述:

輸入有多組數(shù)據(jù)。
每組輸入n,然后輸入n個(gè)整數(shù)(1<=n<=1000),再輸入k。

輸出描述:

輸出第k小的整數(shù)。

示例輸入

6
2 1 3 5 2 2
3

示例輸出

3

代碼5.1.1 解法一:選擇排序+數(shù)組去重

#include <stdio.h>

int main()
{
    int n, k;
    int A[1000];
    while(scanf("%d", &n) != EOF)
    {
        for( int i = 0; i < n; i++)
        {
            scanf("%d", &A[i]);
        }
        scanf("%d", &k);
        for(int i = 0; i < n - 1; i++) //n-1趟選擇排序
        {
            int min = i;
            for(int j = i+1; j < n; j++)
            {
                if( A[j] < A[min] )
                    min = j;
            }
            if( min != i){
                int temp = A[min];
                A[min] = A[i];
                A[i] = temp;
            }
        }
        //數(shù)組去重
        int m = 0;
        for(int i = 0; i < n - 1; i++)
        {
            if(A[i] != A[i+1])
                A[m++] = A[i];
        }
        printf("%d", A[k-1]);
    }
}

例5.2找x

時(shí)間限制:1s 空間限制:64M

題目描述

輸入一個(gè)數(shù)n,然后輸入n個(gè)數(shù)值各不相同,再輸入一個(gè)值x,輸出這個(gè)值在這個(gè)數(shù)組中的下標(biāo)(從0開(kāi)始,若不在數(shù)組中則輸出-1)。

輸入描述:

測(cè)試數(shù)據(jù)有多組,輸入n(1<=n<=200),接著輸入n個(gè)數(shù),然后輸入x。

輸出描述:

對(duì)于每組輸入,請(qǐng)輸出結(jié)果。

示例輸入

2
1 3
0

示例輸出

-1

代碼5.2.1

#include <stdio.h>

int main()
{
    int n, x;
    int A[200];
    int ans = -1;
    while(scanf("%d", &n) != EOF)
    {
        for(int i = 0; i < n; i++)
        {
            scanf("%d", &A[i]);
        }
        scanf("%d", &x);
        for(int i = 0; i < n; i++)
        {
            if(A[i] == x)
            {
                ans = i;
                break;
            }           
        }
        printf("%d", ans);
    }
    return 0;
}

代碼5.2.2 若輸入數(shù)據(jù)有序:二分查找

#include <stdio.h>

int main()
{
    int n, x;
    int A[200];
    int ans = -1;
    while(scanf("%d", &n) != EOF)
    {
        for(int i = 0; i < n; i++)
        {
            scanf("%d", &A[i]);
        }
        scanf("%d", &x);
        int low = 0;
        int high = n-1;
        while(low <= high)
        {  
            int mid = ( low + high ) / 2;
            if(A[mid] == x)
            {
                ans = mid;
                break;
            }
            else if(A[mid] < x)
                low = mid + 1;
            else
                high = mid - 1;
        }
        printf("%d", ans);
    }
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。