演習5弦便利な問題の数学の問題を取得します

以下のために書かれた:http://codeforces.com/problemset/problem/339/A
が、元のタイトルに基づいて入力を処理するために、学生の能力を強化するためにいくつかの強化を行いました。

タイトル説明

コングコングは、第三年生アリス魔法学校です。彼は今、追加を学んでいます。
合計のセットを書き込むための教師。コングコングは、この一連の動作の結果を計算する必要があります。
教師の問題は、整数の複数を含む付加(1〜1000の整数のデータ範囲)、及び2つの正の数の間の文字「+」です。
しかし、式の大きな要素の存在よりも前の要素の後にあれば、コングコングは忘れません。
二つの隣接する要素の各々が加算動作状態にある場合にのみ、「要素の後に前の要素より大きくない」場合は、式を追加コングコングは、解決することができます。
;例えば、 "1 + 2 + 3 + 4 + 5"、 "2 + 2 + 3" Congcongを算出することができる
ので、この式2及び3相に、しかし、不可能でコングコングを計算するために"3 + 2 + 5" 2 Oとの前の3が、3は2よりも大きいです。
今、先生がダウン加算式を配置しており、この問題を計算コングコングを有効にするために、この式は、コングコング計算できるように、元素の添加の順序を入れ替える助けとしてください。

入力形式

入力ラインは、それが計算添加処方コングコングのために必要とされる非空の文字列S(長さsはない1,000以下である)を含みます。
文字列sにスペースはありません。これは、整数のみの複数(1から1000の間の範囲内の各整数)が含まれ、隣り合う仕切証明書との間に「+」記号が存在します。

出力フォーマット

あなたは、各要素は、並べ替えが含まれ、ソートの結果を出力する文字列sにする必要があります。
あなたは、各隣接する二つの要素の間会う前と後の一つの要素が1個以下の要素になることを確認する必要があり、2つは隣接する要素間の「+」記号の分離を持っています。

サンプル入力

3+2+1

サンプル出力

1+2+3

サンプル入力

1+1+3+1+3

サンプル出力

1+1+1+3+3

サンプル入力

2

サンプル出力

2

トピック分析

まず、どのように入力を処理するには?
私たちは、入力がデジタル+文字であることがわかります。
非最後の要素のためのすべての要素は、その背後にある文字は「+」であると、ある;
最後の要素のために、文字は「\ nを」(EOFがあるかもしれない)とそれを以下の通りです。
そこで、我々は、C言語のscanf関数での使用に適しています。
[]、int型のNUMの変数、およびchar型の変数cを定義し、アレイのすべての要素を格納する
それぞれのscanf( "%d個の%のC" 、&​​NUM、&C) ] [配列にNUMをおよびcは入力端に、「の\ n」(またはEOF)であるか否かを決定します。
次いで、配列[]はソートされて出力されます。
次のようにコードは次のとおりです。

#include <bits/stdc++.h>
using namespace std;

int num, a[110], n;
char c;

int main() {
    while (scanf("%d%c", &num, &c) != EOF) {
        a[n++] = num;
        if (c == '\n' || c == EOF) break;
    }
    sort(a, a+n);
    for (int i = 0; i < n; i ++) {
        if (i) putchar('+');
        printf("%d", a[i]);
    }
    putchar('\n');
    return 0;
}

おすすめ

転載: www.cnblogs.com/zifeiynoip/p/11450576.html