打印值会更改代码

时间:2017-07-30 19:35:29

标签: c++ ide

几个小时前,在CodeForces举行了一场比赛,这是比赛的问题之一 -

Problem C(你不得阅读/解决它来回答这个问题)

编辑:根据要求在此处添加问题,再一次,不一定要阅读它。

  

Slastyona和她忠诚的狗Pushok正在玩一场毫无意义的游戏   确实非常有趣。

     

游戏包含多轮。它的规则非常简单:in   每轮,选择自然数k。然后,那个说(或   咆哮)它比其他胜利更快。在那之后,   获胜者的得分乘以k2,失败者的得分为   乘以k。在比赛的开始,Slastyona和   普什克的得分等于一。

     

不幸的是,Slastyona失去了记录所有历史的记事本   记录了n场比赛。她设法回忆了每个人的最终结果   尽管如此,但她对这些游戏的所有回忆都是模糊不清的。救命   Slastyona验证了它们的正确性,换句话说,换句话说   每个给定的分数确定是否有可能进行游戏   完成这样的结果。

     

输入在第一个字符串中,游戏数n(1≤n≤350000)是   给出。

     

每场比赛用一对得分a,b(1≤a,b≤10^ 9)表示 -   相应地,Slastyona和Pushok的结果。

     

输出对于每对分数,回答"是"如果可能的话   游戏以给定的分数结束,并且#34; No"否则。

     

您可以在任意情况下(上方或下方)输出每个字母。

所以我解决了,比赛结束后,我和我的朋友们在问我下一个测试用例时我的答案是什么时讨论了问题 -

1
1 1

我说是#34;是"在我的IDE(Dev-C ++ 5.11)上,(因为它应该是)
但是当我们在ideone上运行它时,它就变成了#34; No" !!

我认为我的代码一定存在问题,所以当我遇到这个问题时我试过调试它,

我的代码 -

#include<stdio.h>

using namespace std;

long long int iscube(long long int n)
{
    long long int lo = 0;
    long long int hi = 1000000;
    while(lo < hi)
    {
        long long int mid = (lo+hi)/2;
        if(mid*mid*mid < n)
            lo = mid+1;
        else
            hi = mid;
    }
    return lo;
}

int main()
{
    long long int a,b;
    int n;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%I64d %I64d",&a,&b);
        long long int c = a*b;
        long long int cb = iscube(c);
        //printf("%lld",cb)
        if(cb*cb*cb == c)
        {
            if(a%cb == 0 && b%cb == 0)
                printf("Yes\n");
            else
                printf("No\n");
            continue;
        }
        printf("No\n");
    }
}

当我输入

1  
1 1

在上面的代码中,答案是&#34;否&#34;
但是,如果我 ONLY 取消注释main()函数中while循环中if语句上方的行,

答案是&#34; 1是&#34;

(这些输出是我在ideone上运行代码时获得的输出,当在Dev-C ++ 5.11上运行时,我得到了#34;是&#34;并且&#34; 1是&#34;正如预期的那样)

现在我正在考虑将我的代码序列的答案评估为WA,在系统测试之后,它出现了 Accepted

有没有人知道为什么会出现这个问题?

(另外,有人可以添加适当的标签,如果有的话)

1 个答案:

答案 0 :(得分:3)

发出警告,您的<?php get_header(); ?> <main id="main" class="site-main" role="main"> <?php // Start the loop while ( have_posts() ) : the_post(); echo '<h1>'; the_title(); echo '</h1>'; echo '<a href="'; the_permalink(); echo '">That\'s me! -> '; the_title(); echo '</a>'; the_content(); // End the loop. endwhile; ?> </main><!-- .site-main --> <?php get_footer(); ?>

中有未定义的行为
scanf

如果将其更改为 warning: length modifier 'I64' results in undefined behavior or no effect with 'd' conversion specifier [-Wformat] scanf("%I64d %I64d",&a,&b); (C ++ 11),那么您将定义行为,但是因为您使用的是C ++,所以只需使用流:

scanf("%lld %lld",&a,&b);

Demo