我觉得是排序部分的问题:
内部循环 for(int j = i+1; j <= n; i++) 的循环变量加法 i++ 是错误的,应该将 i++ 修改为 j++,这样才能正确的进行冒泡排序。
#include
using namespace std;
int main() {
int n, sum, ave, a[10001], maxx, minn, maxi, mini;
cin >> n;
maxx = 0;
minn = 100000; // 此处初始化minn因为输入范围最大为1000,所以理论上不会超出
sum = 0;
// 将数组下标从0开始计算
for(int i = 0; i < n; i++)
cin >> a[i];
// 找到最大最小值及其下标
for(int i = 0; i < n; i++) {
if(a[i] > maxx) {
maxx = a[i];
maxi = i;
}
if(a[i] < minn) {
minn = a[i];
mini = i;
}
}
// 计算剩余元素的总和
for(int i = 0; i < n; i++) {
if(i != maxi && i != mini)
sum += a[i];
}
// 输出平均值
cout << sum / (n - 2) << endl;
// 修改冒泡排序部分
for(int i = 0; i < n - 1; i++) { // 数组下标从0开始计算
for(int j = i + 1; j < n; j++) { // 纠正内循环的计数变量应为j++
if(a[j] < a[i]) {
swap(a[i], a[j]);
}
}
}
// 输出排序后的数组,排除最大最小值
for(int i = 0; i < n; i++) {
if(i != maxi && i != mini)
cout << a[i] << " ";
}
cout << endl;
return 0;
}
