錯誤票據__基礎題

來源:互聯網
上載者:User


題目連結:http://lx.lanqiao.cn/problem.page?gpid=T28


問題描述

某涉密單位下發了某種票據,並要在年終全部收回。

每張票據有唯一的ID號。全年所有票據的ID號是連續的,但ID的開始數位是隨機選定的。

因為工作人員疏忽,在錄入ID號的時候發生了一處錯誤,造成了某個ID斷號,另外一個ID重號。

你的任務是通過編程,找出斷號的ID和重號的ID。

假設斷號不可能發生在最大和最小號。 輸入格式

要求程式首先輸入一個整數N(N<100)表示後面資料行數。

接著讀入N行資料。

每行資料長度不等,是用空格分開的若干個(不大於100個)正整數(不大於100000),請注意行內和行末可能有多餘的空格,你的程式需要能處理這些空格。

每個整數代表一個ID號。 輸出格式

要求程式輸出1行,含兩個整數m n,用空格分隔。

其中,m表示斷號ID,n表示重號ID 範例輸入1 2
5 6 8 11 9 
10 12 9 範例輸出1 7 9 範例輸入2 6
164 178 108 109 180 155 141 159 104 182 179 118 137 184 115 124 125 129 168 196
172 189 127 107 112 192 103 131 133 169 158 
128 102 110 148 139 157 140 195 197
185 152 135 106 123 173 122 136 174 191 145 116 151 143 175 120 161 134 162 190
149 138 142 146 199 126 165 156 153 193 144 166 170 121 171 132 101 194 187 188
113 130 176 154 177 120 117 150 114 183 186 181 100 163 160 167 147 198 111 119 範例輸出2 105 120
思路: 由於輸入有行數要求,故可以用字串來讀取每行,然後以空格為分界點進行讀取各個數字(這裡用到了C語言裡面的一個函數 atoi())。 在資料量比較小的情況下可以借鑒下桶排序的思想,開闢一個整型數組,用來標記讀取到的每一個數,初始化全為0,故m既是數組值為0所對應的下標,n即是數組值為2所對應的下標。
代碼:

#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<cstdlib>using namespace std;const int M = 100000+5;int ar[M];char s[10]; int main(){int x,n,m,num,sum=-1;memset(ar,0, sizeof(ar)); scanf("%d\n",&x);for(int i=0; i<x; ++i){char c[205];gets(c);int idx=0;for(int j=0; j<strlen(c); ++j){if(c[j] == ' '){//取每一個空格之間的數字 num=atoi(s);idx=0;memset(s,0,sizeof(s));  //重新清空數組 ar[num]++;//標記該數字 //printf("num= %d\n",num);sum=max(sum,num);//用來記錄資料裡面的最大數,方便結束迴圈 }s[idx++] = c[j];}num=atoi(s);//最後一個空格後面的數 idx=0;memset(s,0,sizeof(s));  ar[num]++;sum=max(sum,num);}int i;for(i=0; i<=M; ++i){if(ar[i]!=0) break;}for(i; i<=sum; ++i ){//此處用到了資料的最大數 if(ar[i] == 0) m = i;if(ar[i] == 2) n = i;}printf("%d %d\n", m, n);return 0;} 


* 關於atoi() 函數 標頭檔:#include <stdlib.h>

atoi() 函數用來將字串轉換成整數(int),其原型為:
int atoi (const char * str);

【函數說明】atoi() 函數會掃描參數 str 字串,跳過前面的空白字元(例如空格,tab縮排等,可以通過 isspace() 函數來檢測),直到遇上數字或正負符號才開始做轉換,而再遇到非數字或字串結束時('\0')才結束轉換,並將結果返回。

【傳回值】返迴轉換後的整型數;如果 str 不能轉換成 int 或者 str 為空白字串,那麼將返回 0。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.