C语言 UVa -最长小睡

yrefmtwq  于 2023-04-05  发布在  其他
关注(0)|答案(1)|浏览(112)

好吧,这是相当困难的找到一个答案,因为我不知道如何表达这在英语中找到!所以,
我在做最长的小睡问题https://uva.onlinejudge.org/external/101/10191.pdf
我的代码是工作,但我不断收到错误的答案,从法官,我认为问题是当我键入两个测试用例在一排。
I类型:
因此:

Day #1: the longest nap starts at 13:00 and will last for 5 hours and 0 minutes.

但如果我输入:

1
2

数字2作为一个新的测试用例被忽略了,我想这就是为什么我从法官那里得到了错误的答案
所以我希望我输入的第二个数字,在我的代码中被第二个scanf捕获的是新的测试用例。我试图在我的switch case中添加case 1:其中我强制testcase为initH,因为我键入的新测试用例被这个变量捕获,但没有成功

while(scanf("%d", &testcase) == 1) {

    int result = 0, start;

    if(testcase > MAXVALUE)  continue;
     //here I ignore testcase > 100
    if(testcase == 0) {ret = SCANF; start = STARTIME; result = WORK;}
     //if there's no testcase my longest nap will be the 8 hours! SCANF = 5

    for(i = 0; i < testcase; i++) {
        ret = scanf("%d:%d %d:%d %255[a-zA-Z ]", &initH, &initM, &fintH, &fintM, appoint);
         //variables: H(hour), M(minute), appointment

        switch (ret){
        case 5:
            schedule[i].start = initH*HOUR + initM; //struct here
            schedule[i].endin = fintH*HOUR + fintM; //to keep this data
            break;
        default:
            i = testcase;
            break;
        }

        if((initH < INIT) || (fintM + fintH*HOUR) > ENDTIME) {error++; break;}
         //10:00 < time < 18:00 
        if((initH*HOUR + initM) > (fintH*HOUR + fintM)) {error++; break;}
         //initial hour in a schedule < end time in a schedule

        while(getchar() != '\n');
    }

    if(error != 0) {error = 0; continue;} //if error then ignore everything!
xjreopfe

xjreopfe1#

好吧,我昨天一整天都在纠结这个问题,当我决定寻求帮助时,我想出了一个解决办法!实际上很简单!

if(ret == 5){ //only if I have 5 arguments in my scanf!
    if((initH < INIT) || (fintM + fintH*HOUR) > ENDTIME) {error++; break;}
    //10:00 < time < 18:00 
    if((initH*HOUR + initM) > (fintH*HOUR + fintM)) {error++; break;}
    //initial hour in a schedule < end time in a schedule
}

相关问题