#include "stdio.h" #include "math.h" #define N0 100 #define INF -1000000001 int a[N0], n=0; void max12(int *m1, int *m2) { int i, max1=INF, max2=INF, x; while (scanf("%d", &x)==1) a[n++]=x; //************************************************ max1=a[0]; max2=a[0]; for (i=0;i<n;i++) { if(a[i]>max1) max1=a[i]; if(a[i]<max1&&a[i]>max2) max2=a[i]; } //================================================= } bool isPrime(int n) {//************************************************ //================================================= } int main() { int m1, m2; freopen("prime.in", "r", stdin); freopen("prime.out", "w", stdout); max12( &m1, &m2); printf("%d %d\n", m1, m2); printf("%s\n", isPrime(m1+m2)?"Yes":"No"); return 0; }
时间: 2023-07-23 17:18:22 浏览: 136
#include <stdio.h>
这段代码有一些问题,我来给你修正一下:
```
#include <iostream>
#include <cmath>
using namespace std;
const int N0 = 100;
const int INF = -1000000001;
int a[N0], n=0;
void max12(int &m1, int &m2) {
int i, max1=INF, max2=INF, x;
while (scanf("%d", &x) == 1) a[n++] = x;
max1 = a[0];
max2 = a[0];
for (i = 0; i < n; i++) {
if (a[i] > max1) {
max2 = max1;
max1 = a[i];
m2 = m1; // 更新次最大值下标
m1 = i; // 更新最大值下标
} else if (a[i] < max1 && a[i] > max2) {
max2 = a[i];
m2 = i; // 更新次最大值下标
}
}
}
bool isPrime(int n) {
if (n < 2) return false;
int sqrtn = sqrt(n);
for (int i = 2; i <= sqrtn; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int main() {
int m1, m2;
freopen("prime.in", "r", stdin);
freopen("prime.out", "w", stdout);
max12(m1, m2);
cout << m1 << " " << m2 << endl;
cout << (isPrime(m1 + m2) ? "Yes" : "No") << endl;
return 0;
}
```
主要的修改点有:
1. 把头文件 `stdio.h` 改为 `iostream`,并加上命名空间 `std::`,这样可以使用C++的输入输出方法;
2. 把 `&` 改为 `&`,因为我们要修改 `m1` 和 `m2` 的值,而不是修改它们的地址;
3. 在 `max12` 函数中加入更新 `m1` 和 `m2` 的代码;
4. 在 `isPrime` 函数中加上判断小于 2 的情况,因为小于 2 的数都不是素数;
5. 在主函数中使用 `cout` 输出结果,而不是使用 `printf`。
希望能帮到你!
阅读全文