Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 测试用例的意外输出_C++_Implementation_Greedy - Fatal编程技术网

C++ 测试用例的意外输出

C++ 测试用例的意外输出,c++,implementation,greedy,C++,Implementation,Greedy,代码力问题158B- 我得到了测试用例5的一个意外输出。我想我应该得到1作为输出,但我得到的是2。请指导我。法官日志: 测试:#5,时间:30毫秒,内存:380 KB,退出代码:0,检查程序退出代码:1,判定:回答错误 输入 2. 2 1 输出 2. 答复 1. 检查日志 错误答案应为1,找到2 我的解决方案: #include<iostream> using namespace std; int n,a[100000],i,b,c,d,e,f,g,h; int main() {

代码力问题158B-

我得到了测试用例5的一个意外输出。我想我应该得到1作为输出,但我得到的是2。请指导我。法官日志:

测试:#5,时间:30毫秒,内存:380 KB,退出代码:0,检查程序退出代码:1,判定:回答错误 输入 2. 2 1 输出 2. 答复 1. 检查日志 错误答案应为1,找到2

我的解决方案:

#include<iostream>
using namespace std;
int n,a[100000],i,b,c,d,e,f,g,h;
int main()
{
    cin>>n;
    for(i=0;i<n;i++)
    {
        cin>>a[i];
    }
    b=0;
    c=0;
    d=0;
    e=0;
    for(i=0;i<n;i++)
    {
        if(a[i]==1) //To check for number of 1,2,3 and 4 membered groups.
        b=b+1;
        if(a[i]==2)
        c=c+1;
        if(a[i]==3)
        d=d+1;
        if(a[i]==4)
        e=e+1;  
    }
    f=e;
    if(d>b) //More 3 member groups than 1.
    {
        f=f+d; //f=f+b+(g-b) 3 and 1 member groups combine.Remaining 3 i.e. (g-b) member groups will can't combine with 2 member groups.Hence,they take separate taxies.
        g=-1;
    }
    if(b>=d) //More 1 member groups than 3.
    {
        f=f+d;
        g=b-d; //g=remaining 1 member groups.
    }
    h=(2*c)%4; //Empty seats in last taxi.Possible values can be 0,1,2,3.
    if(h==0)
    f=f+(c/2);
    else
    f=f+((c+1)/2);

    if(g!=-1)
    {
        g=g-h; //Remaining 1 member groups after combining with remaining seats in last 2 member taxi.
        if((g%4)==0)
        f=f+(g/4);
        else
        f=f+(g/4)+1;
    }
    cout<<f;
}
#包括
使用名称空间std;
int n,a[100000],i,b,c,d,e,f,g,h;
int main()
{
cin>>n;
对于(i=0;i>a[i];
}
b=0;
c=0;
d=0;
e=0;
对于(i=0;ib)//3个成员组多于1个。
{
f=f+d;//f=f+b+(g-b)3个成员组和1个成员组合并。剩余的3个即(g-b)成员组将无法与2个成员组合并。因此,他们采取单独的出租车。
g=-1;
}
如果(b>=d)//1个成员组多于3个。
{
f=f+d;
g=b-d;//g=剩余的1个成员组。
}
h=(2*c)%4;//最后一辆出租车的空座位。可能的值可以是0,1,2,3。
如果(h==0)
f=f+(c/2);
其他的
f=f+((c+1)/2);
如果(g!=-1)
{
g=g-h;//与最后2人出租车的剩余座位组合后剩余1人组。
如果((g%4)==0)
f=f+(g/4);
其他的
f=f+(g/4)+1;
}

cout如果您的输入是
2 2 1
,那么
b
c
都将是1,使
f
0和
g
1成为第一组条件。
h
将是
(2*1)%4
或2,对
f
进行更新(0+1=1)。由于
g
是1,
g-h
是-1,这将导致您执行
f=f+(g/4)+1
这是
f=1+(-1/4)+1
这在整数数学中是1+0+1=2

我想你是想检查
g-h>0
而不是
g!=-1
,但是有很多地方可以简化你的代码。请注意,使用调试器并逐步解决这些问题会告诉你哪里的问题更快,并且比问问题更有助于提高你的技能

对于其他任何看这个问题的人来说,这是一个相当简单的问题答案

  • 手工操作,看看你是否得到了相同的答案。如果你得到了与计算相同的答案,你的算法是错误的。如果你没有,你的代码是错误的
  • 打印中间计算中的变量,看看它们是否是您认为应该是的
  • 如果有必要,请确保在每次使用之前重新初始化变量(包括数组)
  • 其他提示:

    • 使用switch语句而不是多个if-equal语句
    • 命名变量。它可以帮助您在查看代码时跟踪
    • <> LI>当使用多个变量时,请考虑使用数组代替.<代码> B<代码> > <代码> C <代码> >代码> d>代码>和<代码> e <代码>所有类似。
    我们应该猜测导致输出的输入吗?@Plasmah输入为
    2 1
    谢谢你的建议。我对编程语言有点熟悉,因此我的代码可能看起来很业余。