[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 对于需要用户输入的部分,请打印出短信提示后才允许用户输入。 程序执行输出画面如下(0 表示空白) Integer1:51 Integer2:-4 Integer3:0 Integer4:24 Integer5:-13 Integer6:-6 Integer7:0 Integer8:38 Integer9:-27 Integer10:-48 Integer11: 3 整数12: 17 整数13:8 整数14:0 整数15:21 结果:0□0□0□-48□-6□-4□8□24□38□-27□-13□3□17□21□51
我尝试过的:
C++
#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
因此,从该列表中分割成两个新列表是一件简单的事情。 一种包含所有偶数,末尾有零,另一种包含所有奇数。
或者,您可以使用排序例程中的规则来执行问题所述的操作。
[ad_2]
コメント