//还是那句话,建议大家先学函数,这样代码写的更有条理
AC代码:
#include<iostream>
#include<iomanip>
#include<math.h>
#include<cstring>
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<bits/stdc++.h>
void Rank(int a[], int n)//a为给定的数组,n为该数组的有效长度
{
for (int i = 1; i < n; i++)
{
for (int j = 0; j < n - i; j++)
{
if (a[j] > a[j + 1])
{
int temp = a[j + 1];
a[j + 1] = a[j];
a[j] = temp;
}
}
}
};
int second(int a[], int n)//设计一个函数找出给定数组的第二大的值
{
Rank(a, n);
for (int i = n - 1; i >= 0; i--)
{
if (a[i] != a[n - 1])
{
return(a[i]);
}
}
};
using namespace std;
int main()
{
//下测试排序函数是否正确
/*int a[10] = { 1,5,3,5 };
Rank(a, 4);
for (int i = 0;i < 4; i++)
{
cout << a[i];
}*/
//下测试second函数是否正确
/*int a[5] = { 0,0,-1,-2,-3 };
cout << second(a, 5);*/
int n = 0;
int a[150];
int b[150];
while (cin >> n)//n为数组有效长度
{
for (int i = 0; i < n; i++)
{
cin >> a[i];
b[i] = a[i];//因为a等会要进行重排,故把a原来的序列保存到b中
}
Rank(a, n);//将a按照从小到大的顺序重排
if (a[0] == a[n - 1])//判断整个数组是否都是一个值
{
cout << "none" << endl;
continue;
}
else
{
int sec =0;
sec = second(a, n);//找到“老二”的值
cout << sec;
for (int k = 0; k < n; k++)
{
if (b[k] == sec)//输出对应的值的下标
{
cout << " " << k;//注意格式
}
}
cout << endl;
}
}
//system("pause");
return 0;
}