本人计算机专业,刚刚大二,大一学了一个学期的c和c++,帮同学改一道题时出现问题,题干如下:
在vs上得到了预期效果,并且做了很多测试,输出结果都没有问题,但是在作业网站上提交时显示的是“部分正确”,有几个测试点显示的是“运行超时”,注释了半天不知道哪个循环有问题,希望各位大佬帮我看看哪里导致的运行超时,代码如下:
(没有c币,劳烦各位大佬了。)
#include "pch.h"
#include <iostream>
#include<string>
using namespace std;
class DC
{
private:
string num;//考号
int D, C;//德才分
bool can;//过不过录取线
int sum;//总分
int lei;//属于哪一类,1(都过H),2(D过HC不过),3(D>C),4分别代表4类
public:
DC() {
lei = 0;
D = 0;
C = 0;
can = false;
sum = 0;
}
void get(int L, int H) {
cin >> num >> D >> C;
sum = D + C;
if (D >= L && C >= L)
{
can = true;
if (D >= H && C >= H)
{
lei = 1;
}
else if (D >= H && C < H)
{
lei = 2;
}
else if (D > C&&D < H && C < H)
{
lei = 3;
}
else lei = 4;
}
else
{
can = false;
lei = 5;
}
}
void print()
{
cout << num << " " << D << " " << C << endl;
}
bool rcan() { return can; }
int rsum() { return sum; }
int rlei() { return lei; }
string rnum() { return num; }
int rD() { return D; }
};
int main()
{
int N, L, H;
int M = 0;//合格人数
int i, j;
cin >> N >> L >> H;
DC *p = new DC[N];
for (i = 0; i < N; i++)
{
(p + i)->get(L, H);
if ((p + i)->rcan())M++;
}
DC D;
//对总分进行排序
for (i = 0; i < N - 1; i++)
{
for (j = i+1; j < N; j++)
{
if ((p + i)->rlei() > (p + j)->rlei())
{
D = *(p + i);
*(p + i) = *(p + j);
*(p + j) = D;
}
}
}
for (i = 0; i < N - 1; i++)
{
for (j = i+1; j < N ; j++)
{
if ((p + i)->rlei() == (p + j)->rlei() && (p + i)->rsum() < (p + j)->rsum())
{
D = *(p + i);
*(p + i) = *(p + j);
*(p + j) = D;
}
else if ((p + i)->rlei() == (p + j)->rlei() && (p + i)->rsum() == (p + j)->rsum())
{
if ((p + i)->rD() < (p + j)->rD())
{
D = *(p + i);
*(p + i) = *(p + j);
*(p + j) = D;
}
else if ((p + i)->rD() == (p + j)->rD())
{
if ((p + i)->rnum() > (p + j)->rnum())
{
D = *(p + i);
*(p + i) = *(p + j);
*(p + j) = D;
}
}
}
}
}
cout << M << endl;
for (i = 0; i < N; i++)
{
if ((p + i)->rcan())
{
(p + i)->print();
}
}
delete[] p;
}