如何解决黑客兰克"terminated for timeout"?

how can i resolve Hackerrank "terminated for timeout"?

本文关键字:terminated for timeout 黑客 何解决 解决      更新时间:2023-10-16

问题是找出不可逆的不。S下面的测试用例,这里是可逆的。s表示像36 + 63 = 99(同时包含奇数)。3663都是可逆的。我们要找到所有可逆的no

我也声明函数为inline,但它仍然给出超时错误。从测试用例#1到测试用例#5

inline std::string IntToString ( int number )
    {
      std::ostringstream oss;
       oss<< number;
      return oss.str();
    }

inline int replacer (int n)
{
int r,R=0;
while(n!=0)
    {
       r=n%10 ;
    R=R*10+r ;
     n=n/10;
}
return R ;
}


int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */   
int i,n,t,j,R,Q,L,k,d=0,M=0,D; 

cin>>t ; 
for(i=0;i<t;i++ )
    {
    M=0;
    cin>>n ;
    for(j=1;j<n;j++)
        {

        if(j%10!=0)
       { d=0;
        R= replacer(j) ;
       Q=R+j ;
        std::string C = IntToString (Q);
        L=C.size() ;  

        for(k=0;k<L;k++)
           if(C[k]%2==0)
            d=1 ;
           if(d==0) 
          M++ ;
       }    
    }
    cout<<M<<endl ;
    }

return 0;
}

一个简单的通用答案是"通过使你的代码快速做事",即通过优化它。

分析工具可以帮助您指出代码的"热点"部分,但是解析必须由您自己完成。

您不需要有字符串来获取数字的位数。考虑到使用流,将int转换为string是一个开销很大的操作。如果你想循环一个数字的位数,使用这段代码:

void loopThroughDigits(int n)
{
    while(n > 0)
    {
        int digit = n % 10;
        n /= 10;
        //do something with digit
    }
}

除此之外,您应该考虑存储之前的结果,并从之前的"检查点"开始计算。我既不知道内存限制也不知道最大输入,所以我不确定这是一个可靠的方法。