我缺少哪个测试用例?

时间:2018-09-08 15:15:28

标签: c algorithm testing

我正在解决一个问题。但是我缺少了一些东西。我的解决方案有一些测试用例是错误的。我需要找到该测试用例。 对于另一个子任务,就是说执行花费了太长时间。

  

主厨的知识和能力分别等于N和M时,他将有权使用“话语”。最初,他有权力   1和知识1。

     

厨师可以执行以下几种动作来提高其技能:

     
      
  • 解决问题-用X增加他的知识
  •   
  • 俯卧撑-将力量提高Y
  •   
  • 安装ShareChat与朋友保持联系-将知识和能力提高1
  •   
     

厨师最多只能安装一次ShareChat。其余动作可以执行任意次,并且动作可以是   以任何顺序执行。

     

帮助厨师找出是否有可能从讨论转移到话语。

     

输入

     

输入的第一行包含一个单个整数T,表示测试用例的数量。 T测试用例的说明如下。

     

每个测试用例的第一行也是唯一一行包含四个用空格分隔的整数N,M,X和Y。

     

输出

     

对于每个测试用例,如果有可能达到要求的知识,则打印包含一行“ Chefirnemo”的一行   电源或“ Pofik”(如果不可能)

您也可以访问此链接以阅读问题 链接到问题https://www.codechef.com/SEPT18B/problems/CHEFADV 我的解决方案-

#include<stdio.h>
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            long int n,m,x,y,power,know;
            scanf("%ld%ld%ld%ld",&n,&m,&x,&y);
            power=1;
            know=1;
            if(power+1==m && know+1==n)
                printf("Chefirnemo\n");
            else {
                while(power+y<m)
                    power=power+y;
                if(power+y==m)
                    power=power+y;
                while(know+x<n)
                    know=know+x;
                if(know+x==n)
                    know=know+x;
                if(power==m && know==n)
                    printf("Chefirnemo\n");
                else if(power+1==m && know+1==n)
                    printf("Chefirnemo\n");
                else
                    printf("Pofik\n");
            }
        }
        return 0;
    }

3 个答案:

答案 0 :(得分:2)

如果x==1(m-1)%y==1或相反(即y==1(n-1)%x==1),您的代码将失败。然后,在安装ShareChat无法解决问题时,迭代次数将从power增加到n,将know增加到m-1。但是,如果您仅将power增加到n-1,则安装ShareChat会得到匹配。

正确的解决方案应该更加小心地安装ShareChat。例如

bool chefirnemo(int n, int m, int x, int y)
{
    // 0 check that input is okay
    assert(1<=n && 1<=m && 1<=x && 1<=y);
    // 1 change to the equivalent problem where power
    //   and knowledge are 0 initially
    --n; --m;
    // 2 try w/o installation of ShareChat:
    if (n>=0 && (n%x)==0 && m>=0 && (m%y)==0)
        return true;
    // 3 install ShareChat
    --n; --m;
    // 4 try again
    return (n>=0 && (n%x)==0 && m>=0 && (m%y)==0);
}

答案 1 :(得分:0)

  1. 您的规则不保证输入为正。如果X或Y为零,则循环永远不会终止。 (请注意,这是您的释义存在的问题,挑战规则确实可以确保正值)

    测试用例:2 2 0 0

    测试用例:2 4 0 2

    测试用例:4 4 1 0

  2. 您应用(+ X,0)和(0,+ Y)多少次应取决于是否使用(+ 1,+ 1)动作...但是您已经锁定了决定

    测试用例:5 6 1 2

答案 2 :(得分:-1)

尽管Walter确实指出了可能的提示。 该解决方案似乎无效。