当前位置: 首页 > 知识库问答 >
问题:

由于Hackerrank中的超时,我的提交不被接受

从景曜
2023-03-14

当我只为一些特定的测试用例运行代码时,我得到了一个“由于超时错误而终止”。即使我的代码为其他测试用例成功编译。有人能帮我吗

问题陈述
一个能被2整除的数字叫做偶数。Continue是与break语句相反的循环控制语句,它不终止循环,而是强制执行循环的下一次迭代。Sohan很想知道给定范围内的偶数总数,但他的朋友不喜欢数字。

输入格式

第一行将包含测试用例的数量。然后测试用例如下:每个测试用例包含一个包含三个数字的单行

约束条件
1

输出格式

对于每个testcase,输出一个整数,范围内的total偶数计数除外。

样本输入0

2
2 5 4
0 8 5

样本输出0

1
5

解释0

在第一个测试用例中:除4外,2仅为偶数。在第二个测试用例中:0,2,4,6,8

我的答案是:

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() 
{
  int t;
  scanf("%d",&t);
  while(t--)
   {
     int a,b,k,i,count=0;
     scanf("%d %d %d",&a,&b,&k);
     for(i=a;i<=b;i++)
       {
         if(i%2==0)
           {
             if(i==k)
               continue;
             else
               count+=1;
            }    
        }
    printf("%d\n",count);
    }
  return 0;
}

共有1个答案

殷德本
2023-03-14

您的代码工作正常,但可以加快速度。如果O(n)算法的复杂性,这意味着在最坏的情况下,它将在10^5*10^8=10^13数字上循环。根据一般经验,您的算法在这类问题中允许执行的最大操作数是10^7,因此您已经超出了限制。

这意味着您需要找到一个更好的算法,该算法能够计算结果,而无需遍历所有数字。尝试自己找到这些案例的答案(不使用程序!),你应该注意到一个模式,它可以让你找到算法。请注意,我没有提到k——一旦你有了一个算法,你就可以很容易地把它作为事后的想法添加进去。

  • a=0,b=100

我已经在下面描述了一个算法的概要,但是我鼓励你在展示扰流板之前,试着自己解决这个问题。

你只关心偶数。这意味着当a为奇数时,我们可以将其增加1,当b为奇数时,我们可以将其减少1,所有这些都不会改变结果。通过让我们只考虑偶数,这简化了算法的其余部分。在ab之间(包括这两个值)正好有b-a1整数,其中(b-a)/21整数是偶数(一半,四舍五入)。如果k为奇数,或超出范围a

 类似资料:
  • 关于这个话题有很多讨论。我看了一遍,但没有一个有用。 问题似乎相当简单: 如果我们列出10以下的所有自然数,它们是3或5的倍数,我们得到3、5、6和9。这些倍数之和是23。 求N以下3或5的所有倍数之和。 输入格式第一行包含表示测试用例数量的T。接下来是T行,每一行包含一个整数N。 输出格式对于每个测试用例,打印一个整数,表示N以下3或5的所有倍数之和。 约束1≤T≤10^5 1≤N≤10^9 然

  • 当我只为一些特定的测试用例运行代码时,我得到了一个“由于超时错误而终止”。即使我的代码为其他测试用例成功编译。有人能帮我吗? 链接-https://www.hackerrank.com/challenges/phone-book 问题陈述: 你会得到一本电话簿,里面有人们的名字和电话号码。之后,你会得到一些人的名字作为查询。对于每个查询,打印该人的电话号码。 输入格式: 第一行有一个整数,表示通讯

  • 我有一个非常基本的JTA问题。 我们使用Spring的AOP将WebLogicJtaTransactionManager切入点应用于服务类中的任何方法......并且我们设置tx: method timeout="60"。 有趣的是在该服务中,我们运行一个select语句从数据库中检索记录(使用Hibernate/JPA),然后去做一些与数据库/事务无关的工作。该方法运行时间超过60秒,并且永远不

  • 我正在尝试解决一个来自HackerRank的问题,当我提交我的解决方案时,我得到一个错误,说明“由于超时而终止”。 问题:对n个大小的数组的左旋转操作将数组的每个元素向左移动1个单位。例如,如果对数组[1,2,3,4,5]执行两次左旋转,那么该数组将变为[3,4,5,1,2]。 给定一个由n个整数和一个数字d组成的数组,对该数组执行d个左旋转。然后将更新后的数组打印为单行以空格分隔的整数。 输入格

  • 问题内容: 我正在运行Mac OS 10.9.5 (Mavericks),已经按照https://docs.docker.com/installation/mac/来安装Docker。即使boot2docker VM在后台运行,我在运行Docker时也会收到超时错误消息。 我已验证Docker在boot2docker VM中运行并且我的端口正确。 问题答案: 我也遇到了这个问题,这是一个临时解决方

  • 我在google cloud中创建了一个google cloud函数,它将连接到我在google cloud中创建的postgresql实例。 我正在使用'pg'节点模块。 我已经为此创建了一个私有IP。 我收到以下错误: 错误:由于在timeout.ConnectionTimeouthAndle.SetTimeout(/workspace/node_modules/pg/lib/client.j