配列を最小にする数(C++)

6968 ワード

タイトル記述は正の整数配列を入力し、配列内のすべての数字をつなぎ合わせて1つの数に並べ、つなぎ合わせることができるすべての数字の中で最小の1つを印刷します.例えば配列{3,32321}を入力すると、この3つの数字が並べられる最小数字は321323となる.
構想:sort()関数の使用方法:
  • は2つのパラメータを含む:sort(ヘッダアドレス、テールアドレス);//デフォルトは、小さいから大きいに並ぶ
  • です.
  • は3つのパラメータを含む:sort(ヘッダアドレス、テールアドレス、ソート方法);//並べ替えられた
  • 注意:to_stringメソッドはint型をstring型に変換する
    #include
    #include
    #include
    #include
    using namespace std;
    
    static bool cmp(int a, int b) {
    	string A = "";
    	string B = "";
    	A += to_string(a);
    	A += to_string(b);
    	B += to_string(b);
    	B += to_string(a);
    
    	return A < B;
    }
    string PrintMinNumber(vector<int> numbers) {
    	string  answer = "";
    	//    :“    ”:          ,    ,           ,    。
    	sort(numbers.begin(), numbers.end(), cmp);
    	for (int i = 0;i < numbers.size();i++) {
    		answer += to_string(numbers[i]);
    	}
    	return answer;
    }
    
    int main() {
    	vector<int> arr;
    	int temp;
    	while (cin >> temp) {
    		arr.push_back(temp);
    		if (cin.get() == '
    '
    ) { break; } } string res = PrintMinNumber(arr); cout << res << endl; return 0; }