ブルーブリッジカップ-エラーチケット(ソート)


エラー手形:http://lx.lanqiao.org/problem.page?gpid=T28
問題の説明
ある秘密関係部門はある手形を発行し、年末にすべて回収しなければならない.
各手形には一意のID番号があります.年間全手形のID番号は連続していますが、IDの開始番号はランダムに選択されています.
スタッフの不注意により、ID番号の入力中にエラーが発生し、あるIDが切れ、もう一つのIDが重複しました.
あなたの任務はプログラミングを通じて、ブレーク番号のIDと重い番号のIDを見つけることです.
最大サイズと最小サイズでは、ブレーク番号が発生しないと仮定します.
入力フォーマット
要求プログラムは、まず、後のデータ行数を表す整数N(N<100)を入力する.
次にN行データを読み込む.
各行のデータ長は等しくなく、スペースで区切られた複数(100個未満)の正の整数(100000以下)です.行内と行末に余分なスペースがある可能性があります.プログラムでは、これらのスペースを処理する必要があります.
各整数はID番号を表します.
出力フォーマット
プログラムは1行を出力し、2つの整数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
なぜscanfの戻り値を使わないのか不思議ですが、このような規定がありますか?
データのセットが1つしかないので、ファイルの最後まですべての数字を直接読めばいいです.
次に、ソートしてブレーク番号と重い番号を見つけます.
#include <cstdio>
#include <algorithm>

using namespace std;

int num[105],m,n,mx=0,i=1;

int main() {
    scanf("%d",&m);
    while(1==scanf("%d",&num[mx]))
        ++mx;
    sort(num,num+mx);
    while(i<mx) {
        if(num[i]==num[i-1])
            n=num[i];
        else if(num[i]-num[i-1]==2)
            m=num[i]-1;
        ++i;
    }
    printf("%d %d
",m,n); }