C語言錯誤票據

寫在前面:這裏是小王成長日誌,一名在校大學生,想在學習之餘將自己的學習筆記分享出來,記錄自己的成長軌跡,幫助可能需要的人。歡迎關注與留言。

題目:

題目鏈接:https://www.dotcpp.com/oj/problem1458.html

題目 1458: [藍橋杯][2013年第四屆真題]錯誤票據

時間限制: 1Sec 內存限制: 128MB 提交: 3206 解決: 1178

題目描述
某涉密單位下發了某種票據,並要在年終全部收回。
每張票據有唯一的ID號。全年所有票據的ID號是連續的,但ID的開始數碼是隨機選定的。
因爲工作人員疏忽,在錄入ID號的時候發生了一處錯誤,造成了某個ID斷號,另外一個ID重號。
你的任務是通過編程,找出斷號的ID和重號的ID。
假設斷號不可能發生在最大和最小號。
輸入
要求程序首先輸入一個整數N(N< 100)表示後面數據行數。
接着讀入N行數據。
每行數據長度不等,是用空格分開的若干個(不大於100個)正整數(不大於100000),請注意行內和行末可能有多餘的空格,你的程序需要能處理這些空格。
每個整數代表一個ID號。
輸出
要求程序輸出1行,含兩個整數m n,用空格分隔。
其中,m表示斷號ID,n表示重號ID
樣例輸入
2
5 6 8 11 9
10 12 9
樣例輸出
7 9

C語言解法

三步走:輸入初始化,排序,找出重複值和空缺值

#include <stdio.h>

int main()
{
    int n, min, temp, len = 0;
    int arr[100001];
    scanf("%d", &n);
    //輸入 初始化

    while (~scanf("%d", &arr[len]))
        len++;

    //使用選擇排序 小到大
    for (int i = 0; i < len; i++)
    {
        min = i;
        for (int j = i + 1; j < len; j++)
            if (arr[j] < arr[min])
                min = j;
        if (min != i)
        {
            temp = arr[min];
            arr[min] = arr[i];
            arr[i] = temp;
        }
    }

    //堆排序完成的數組進行判斷
    int brk, rep;
    for (int i = 0; i < len-1; i++)
    {
        // printf("%d ",arr[i]);
        if (arr[i] != arr[i + 1] - 1 && arr[i] != arr[i + 1])
            brk = i;
        if (arr[i] == arr[i + 1])
            rep = i;
    }

    //輸出結果
    printf("%d %d", arr[brk]+1, arr[rep]);
}


都看到這裏了,各位哥哥姐姐叔叔阿姨給小王點個贊 關個注 留個言吧,和小王一起成長吧,你們的關注是對我最大的支持。
有事沒事進來看看吧 : 小王的博客目錄索引
C語言專欄看這 : C語言學習專欄


如果以上內容有任何不準確或遺漏之處,或者你有更好的意見,就在下面留個言讓我知道吧-我會盡我所能來回答。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章