poj1017我的程序哪错了 http://poj.org/problem?id=1017 不要粘贴答案

或者不必指出我的错误,给出一个错误用例也行,题目给的例子都能通过。不要从别的地方拷贝现成的答案,我也会搜。#include<stdio.h>#include<stdlib... 或者不必指出我的错误,给出一个错误用例也行,题目给的例子都能通过。不要从别的地方拷贝现成的答案,我也会搜。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int a[6];
int result,avaibleOne,avaibleTwo;
while( scanf("%d %d %d %d %d %d",a,(a+1),(a+2),(a+3),(a+4),(a+5)) )
{
if(a[0]==0 && a[1]==0 && a[2]==0 && a[3]==0 && a[4]==0 && a[5]==0)
break;
result = 0;
avaibleOne = 0;
avaibleTwo = 0;
result += a[5];
result += a[4];
avaibleOne = a[4] * 11;
result += a[3];
avaibleTwo = a[3] * 5;
result = result + a[2]/4;
if(a[2]%4 == 1)
{
avaibleOne += 7;
avaibleTwo += 5;
result++;
}
else if(a[2]%4 == 2)
{
avaibleOne += 6;
avaibleTwo += 3;
result++;
}
else if(a[2]%4 == 3)
{
avaibleOne += 5;
avaibleTwo += 1;
result++;
}
if(avaibleTwo >= a[1])
{
avaibleOne = avaibleOne + (avaibleTwo - a[1]) * 4;
}
else
{
result = result + (a[1] - avaibleTwo)/9;
if((a[1] - avaibleTwo)%9 == 0)
{
result++;
avaibleOne = 36 - (a[1] - avaibleTwo)%9*4;
}
}
if(avaibleOne < a[0])
{
result = result + (a[0] - avaibleOne)/36 + 1;
}
printf("%d",result);
}
return 0;
}
展开
 我来答
jimmy19871117
推荐于2016-02-18 · 超过45用户采纳过TA的回答
知道小有建树答主
回答量:211
采纳率:0%
帮助的人:131万
展开全部

你好,我想这样吧,我翻了一下我做过的代码(好久远了!),我没看你的代码,虽然很没趣,但是可以这么找你的不对的case:

做一个程序,生成一个文件,包含10**6个case(每个迭代[0, 9]),然后用一个正确的代码和你的错误的代码分别来跑,生成输出文件,用diff等工具比较一下。如果case太多,做少一点,既然你的程序是错了,应该容易找到错的case。你有linux环境么?有的话这脏活就是几行命令而已。

贴一下我AC了的代码:

#include <stdio.h>

#define PACKETKIND 6

int main(void)
{
    int packetnum[PACKETKIND];
    int parcelnum, sum;

    while (1) {
        sum = 0;
        for (int i = 0; i < PACKETKIND; i++) {
            scanf("%d", &packetnum[i]);
            sum += packetnum[i];
        }
        if (sum == 0) {
            break;
        }

        parcelnum = 0;
        parcelnum += packetnum[5];
        parcelnum += packetnum[4];
        parcelnum += packetnum[3];
        parcelnum += (packetnum[2] + 3) / 4;

        int array[4] = {0, 5, 3, 1};
        int left2 = 5 * packetnum[3] + array[packetnum[2] % 4];

        if (packetnum[1] > left2) {
            parcelnum += (packetnum[1] - left2 + 8) / 9;
        }

        int left1 = 36 * parcelnum - 36 * packetnum[5] - 25* packetnum[4] - 16 * packetnum[3] - 9 * packetnum[2] - 4 * packetnum[1];

        if (packetnum[0] > left1) {
            parcelnum += (packetnum[0] - left1 + 35) / 36;
        }

        printf("%d\n", parcelnum);
    }

    return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式