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;
} 展开
#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;
} 展开
1个回答
展开全部
你好,我想这样吧,我翻了一下我做过的代码(好久远了!),我没看你的代码,虽然很没趣,但是可以这么找你的不对的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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询