关于while循环中不加cnt != n 就会导致 RE 错误的原因讨论
查看原帖
关于while循环中不加cnt != n 就会导致 RE 错误的原因讨论
99452
BDICOMENOW楼主2022/6/20 11:34

问题1:出现RE 是因为死循环导致的吗? 还是其他原因导致的。请大佬指出。(PS:当我装不满背包的情况下就会出现RE)

下方代码中有具体问题描述

#include<cstdio>
#include<iostream>
#include<cmath>//引入头文件 
#include<algorithm>
#include<cstring>
using namespace std;


int n, t;
struct node{
    double weight, value;
}c[200];

bool cmp(node a,node b) {
    return (a.value / a.weight) > (b.value / b.weight);
}

int main()
{
    cin >> n >> t;
    for (int i = 0; i < n; i++) {
        cin >> c[i].weight >> c[i].value;
    }
    sort(c, c + n, cmp);
    double ans=0;
    int cnt = 0;
    // 问题:此处while循环 不加cnt != n 就会导致 RE 错误,加了就AC了。
    // 主要是想问此处导致RE的具体原因是什么?
    // 是不是死循环导致的RE,如果是死循环的话,不应该是TLE吗?
    // 还是说在我死循环过程中 cnt 不停的进行 “++”操作导致,访问了非法内存导致的?
    while (t&&cnt!=n) {
        if (t >= c[cnt].weight) {
            t -= c[cnt].weight;
            ans += c[cnt].value;
            cnt++;
            continue;
        }
        if (t > 0 && t < c[cnt].weight) {
            ans += (t)*(c[cnt].value / c[cnt].weight);
            cnt++;
            t = 0;
        }
    }
    printf("%.2f",ans);


    return 0;//结束程序 
}


2022/6/20 11:34
加载中...