一维指针和数组,键盘输入若干整数到一个数组中,将其调整为所有质数在前,和数在后,输入的正整数个数不定2000个只取前2000个,以-99999结束,用C++写
时间: 2023-11-30 22:04:13 浏览: 97
好的,这道题可以使用双指针的方法,定义一个指针指向数组的开头,同时定义一个指针指向数组的结尾,然后不断向中间靠拢,将质数放在前面,和数放在后面。
下面是代码实现:
```c++
#include <iostream>
using namespace std;
// 判断是否是质数
bool isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
int main() {
const int MAXN = 2005;
int arr[MAXN];
int n = 0; // 输入的正整数个数
int num;
while (cin >> num) {
if (num == -99999) break;
arr[n++] = num;
if (n >= MAXN) break;
}
int left = 0, right = n - 1;
while (left < right) {
// 从左往右找到第一个和数
while (left < right && isPrime(arr[left])) {
left++;
}
// 从右往左找到第一个质数
while (left < right && !isPrime(arr[right])) {
right--;
}
// 交换左右两个数
swap(arr[left], arr[right]);
}
// 输出调整后的数组
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
输入示例:
```
3 8 1 7 4 6 2 5 -99999
```
输出示例:
```
5 7 3 2 4 6 1 8
```
阅读全文