[ad_1]
C++でプログラムを書きます。 出力の最後の列は折り返されません。 ユーザーはキーボードから 15 個の整数 (正および負の整数を含む) を入力できます。 プログラムは入力数値を (小さい値から大きい値の順に) 並べ替え、結果を出力します。 ただし、ソート ルールは次のようにわずかに調整されます。 (1) すべての偶数はすべての奇数より前にソートされる必要があります (2) すべての偶数とすべての奇数は小さい値から大きい値の順にソートされます (3) 入力に 0、0 が含まれる場合最後にソートされます 前後のゼロ以外の数値は、前述のルールに従ってソートされます。 たとえば、入力数値の順序は 51 -4 0 24 -13 -6 0 38 -27 -48 3 17 8 0 21 です。その場合、並べ替えられた結果は次のようになります: 0 0 0 -48 -6 -4 8 24 38 – 27 -13 3 17 21 51 ユーザー入力が必要な部分については、ユーザーに入力を許可する前にテキスト メッセージ プロンプトを印刷してください。 プログラム実行出力画面は以下のとおりです(は空白を意味します) Integer1:51 Integer2:-4 Integer3:0 Integer4:24 Integer5:-13 Integer6:-6 Integer7:0 Integer8:38 Integer9:-27 Integer10:-48 Integer11: 3 Integer12: 17 Integer13:8 Integer14:0 Integer15:21 結果: 0□0□0□-48□-6□-4□8□24□38□-27□-13□3□17□21□51
私が試したこと:
#include <iostream> using namespace std; void sortArray(int arr[], int n) { int temp; for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { if (arr[i] > arr[j]) { temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } int main() { int nums[15]; int sortedNums[15]; int n = 0; for (int i = 0; i < 15; ++i) { cout << "Integer" << i + 1 << ": "; cin >> nums[i]; } for (int i = 0; i < 15; ++i) { if (nums[i] == 0) { sortedNums[n++] = nums[i]; } } for (int i = 0; i < 15; ++i) { if (nums[i] != 0 && nums[i] % 2 == 0) { sortedNums[n++] = nums[i]; } } for (int i = 0; i < 15; ++i) { if (nums[i] % 2 != 0) { sortedNums[n++] = nums[i]; } } // ?整?排序???行排序 sortArray(sortedNums, n); // ?出?果 cout << "Result: "; for (int i = 0; i < n; i++) { cout << sortedNums[i] << " "; } return 0; }
解決策 1
最初に入力値に対して単純なバブル ソートを使用すると、すべての数値が順番に並べられます。 したがって、サンプルでは、並べ替えられたリストは次のようになります。
0 0 0 -48 -6 -4 8 24 38 -27 -13 3 17 21 51
したがって、そのリストから 2 つの新しいリストに分割するのは簡単です。 1 つは最後にゼロを含むすべての偶数を含み、もう 1 つはすべての奇数を含みます。
あるいは、並べ替えルーチンのルールを使用して、質問の内容を実行することもできます。
[ad_2]
コメント