weixin_44047790 2019-08-12 10:15 采纳率: 0%
浏览 384

大一c++算法类作业问题

本人计算机专业,刚刚大二,大一学了一个学期的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;
}
  • 写回答

1条回答 默认 最新

  • Italink 2019-08-12 10:26
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常