ブルーブリッジカップ(2013 C / C ++グループBのタイトル7)間違ったノート

著作権:再版の場合、違法コピーの危険を私に連絡https://blog.csdn.net/qq_41106517/article/details/88372468

問題の説明:


タイトル:エラー法案

    秘密のユニットは、いくつかのメモを下し、完全に今年の終わりに回復します。

    各チケットは、固有のID番号を持っています。すべての年次法案のID番号が連続しているが、デジタルIDの先頭がランダムに選択されています。

    壊れたID番号、他の重ID番号で、その結果、ID番号を入力する場合ためスタッフ過失、エラーが発生しました。

    あなたの仕事は、壊れた数字のIDのID番号と重量を見つけるようにプログラムされています。

    最小および最大数に生じにくい番号をオフと仮定する。

最初の入力が整数N(N <100)に必要なプログラムは、以下のデータの行数を表します。
そして、Nラインのデータを読み込みます。
分離された複数の空間を有する不等長の各行は、(100未満)は、正の整数(100,000未満)の
各整数ID番号を表しています。

スペースで区切られた2つの整数のMnを含む、請求項1に記載のプログラム出力ライン、。
ここで、mは、壊れたIDの数を表し、nは重量のID番号を表し

例えば:
ユーザ入力:
2
。5 6 8 11 9 
10 9〜12であります

プログラムの出力:
79


別の例:
ユーザー入力:
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 119 160,167,147,198,111

プログラムの出力:
105120
   

以下のためのリソース:
ピークメモリ消費量<64M
CPU消費量<1000ミリ秒


不要なコンテンツ「...を入力してください」:厳密に何かを印刷する余分ではない、出力の要件に従ってください。

1つのファイルにすべてのソースコードは、デバッグを通じて、コピー元を提出します。

注:主な機能は、0を返す必要があり
注意:のみを使用してANSI C / ANSI C ++標準では、特殊な関数を呼び出していないビルド環境やオペレーティングシステムに依存します。
注意:すべての依存の機能を明示的にする#include <xxx>の、一般的に省略したプロジェクトのソースファイルのヘッダ・ファイルでは提供できない必要があります。

あなたが送信すると、コンパイラの所望のタイプを選択するように注意を払います。

 



#include<iostream>
#include<algorithm>
using namespace std;
int main(){
	int N,i,j,k=0;
	scanf("%d",&N);
	int sum=0,N1=N,ID1,ID2;
	int a[100][100];	
    int b[100]={0};
    int c[100000];
	while(N--){	
	    char s=' ';	
	    for (i=0;i<100&&s!='\n';i++)    //最大输入100个数,遇到回车就终止循环	
	    {		
	        scanf("%d",&a[k][i]);		
	        s=getchar();           //s用来接收是否是回车
	        b[k]++;
	    } 	
	    k++;
	}
	int d=0;	
	for(int m=0;m<N1;m++){
		for(int n=0;n<b[m];n++){
			c[d++]=a[m][n];
			sum++;
//			printf("%d ",a[m][n]);
		}
//		printf("\n");
	}
	sort(c,c+sum);              //排序 
//	for(int i=0;i<sum;i++){
//		printf("%d ",c[i]);
//	}
    for(int k=1;k<sum;k++){
    	if((c[k]-c[k-1])==2){
    		ID1=c[k-1]+1;
		}
		if(c[k] == c[k-1]){
			ID2=c[k];
		}
	}
	printf("%d %d",ID1,ID2);
	
	return 0;
} 

公式ソリューション:

#include <iostream>
#include <sstream>
#include <algorithm>

using namespace std;
const int MaxN = 10000;
int line;
int data[MaxN];

void s2i(string &str, int &num) {
    stringstream ss;
    ss << str;
    ss >> num;
}

int main(int argc, const char *argv[]) {
    scanf("%d", &line);
    getchar();
    int index = 0;
    for (int i = 0; i < line; ++i) {
        string s;
        getline(cin, s);
        istringstream iss(s);
        string tmp;
        while (getline(iss, tmp, ' ')) {
            s2i(tmp, data[index++]);
        }
    }
//    cout << index << endl;
    sort(data, data + index);
    int a, b;
    for (int i = 1; i < index; ++i) {
        if (data[i] == data[i - 1] + 2)a = data[i] - 1;//printf("%d ", data[i] - 1);
        if (data[i] == data[i - 1]) b = data[i];//printf("%d", data[i]);
    }
    printf("%d %d", a, b);
    return 0;
}

 

おすすめ

転載: blog.csdn.net/qq_41106517/article/details/88372468