数据点完全没有考虑到“若取模结果去重后数组剩余数字不足两个”的情况,导致我的错误代码也可以通过此题。 我的错误代码如下
#include<bits/stdc++.h>//c++万能头文件
using namespace std;
long long a,er,san=-1,b[200010];//定义数组和变量
int main(){//主函数
cin>>a;//输入变量a
for(int i=0;i<a;i++){
cin>>b[i];
}//输入数组b的各个值
sort(b,b+a);//按从小到大的顺序,给数组b排序
for(int i=a-2;i>=0;i--){
if(b[i]!=b[a-1]){
er=i;
break;
}//如果找到了数组b的严格次大值,记录并退出循环
}
for(int i=er-1;i>=0;i--){
if(b[i]!=b[er]){//判断b[i]是否等于数组b的严格次大值(b[er]),如果不是则b[i]必定为数组b(已去重)第三大的数
san=b[i];//记录数组b(已去重)中第三大的数(即b[i])
break;//退出循环
}
}//寻找数组b(已去重)中第三大的值并记录
er=b[er];
if(san==-1){
cout<<b[a-1]%er;
//如果数组b只存在两个数,输出数组b中所有数取模后得到的所有值中的严格次大值(即数组b中最大的数模第二大的数)
}else if(san>=b[a-1]%er){
cout<<san;//如符合条件,输出san(此时san应为数组b中所有数取模后得到的所有值中的严格次大值)
}else if(san<b[a-1]%er){
cout<<b[a-1]%er;//如符合条件,输出b[a-1]%er(此时b[a-1]%er应为数组b中所有数取模后得到的所有值中的严格次大值)
}
return 0;//结束运行
}