这个题目我自己写的代码如下,但是运行错误,希望大家可以帮忙找错,之后有时间回来继续调试修改。
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
int main()
{
int num;
cin>>num; //一共要几组数据
int y[num], result[num]; //定义数组,这些数组的大小都是num
int i=0;
int num2 = num;
//输入数据
while(num--){
cin>>y[i];
getchar();
cin>>result[i];
i++;
}
//定义一个集合存放阈值。用集合的原因是阈值不能重复
set<int> edge;
//将可能的阈值存放在集合中
for(int i=0; i<num2; i++){
edge.insert(y[i]);
}
//定义集合迭代器
set<int>::iterator it;
it = edge.begin();
int edgen = edge.size();
int pred[edgen][num]; //预测值为二维数组,因为每个阈值都对应一行
int newedge[edgen]; //这个数组是集合数组
//迭代将迭代器中的阈值放入相同大小的数组中
for(int i=0; i<edgen; i++, it++){
newedge[i] = *it;
}
//预测值的赋值,这里需要计算,阈值从newedge[]中选择,一个阈值要和多个yi比较,当yi<阈值则predi=0,否则predi=1
/*第一个for遍历阈值数组newedge[]
第二个for遍历y数组y*/
for(int i=0; i<edgen; i++){
for(int j=0; j<num2; j++){
if(y[j] < newedge[i]){
pred[i][j] = 0;
}
else{
pred[i][j] = 1;
}
}
}
//比较pred与result的大小,数组x中存放每个的正确次数
int x[edgen] = {0};
for(int i=0; i<edgen; i++){
for(int j=0; j<num2; j++){
if(pred[i][j] == result[j]){
x[i] = x[i]+1;
}
}
}
//寻找最大值下标
int maxnum = 0;
for(int i=0; i<edgen; i++){
if(x[i] >= x[maxnum]){
maxnum = i;
}
}
//输出最佳阈值
cout<<endl<<newedge[maxnum];
system("pause");
return 0;
}