【问题标题】:Trouble with mod C [closed]mod C的问题[关闭]
【发布时间】:2015-11-04 11:43:32
【问题描述】:

我刚开始做 codeforces 问题,我从问题 4-A(西瓜)开始,其中给定一个 int x 公斤数,如果你把西瓜分成两半,每一个都有偶数公斤,如果不是“否”。 我的问题是当输入为 5 时我得到“是”,它应该是“否” 这是我的代码:

#include <stdio.h>
int main (int x) {
    if((x/2) % 2 == 0) {
        printf("YES");
    }else {
        printf("NO");
    }
    return 0;
}

【问题讨论】:

  • 呃...您打算如何将您的论点传递给您的 main 函数? 5 是如何到达那里的?你如何将x 设置为5
  • 我对声称仅执行 x%2 == 0 专门作为测试的答案感到有些惊讶。那将不会满足该问题的要求。甜瓜必须 (a) 偶数公斤,并且 (b) 重量超过 完全超过 2 公斤。任何大于 2 的偶数都可以拆分为两个偶数(通常在多个分区配置中)。
  • (x/2) % 2 等价于x &amp; 0x2。你想被 4 整除,请改用x % 4
  • @LưuVĩnhPhúc 被四除也不会减少它。 10 是问题的有效权重。它可以分成两部分,6和4,都是偶数。问题中没有任何内容表明拆分必须是 both 部分的 same 数字。如果帖子中有 OP linked the original question,它可能会很方便。还是你说应该是(x/4) % 2

标签: c math division


【解决方案1】:

问题与mod无关,而与参数传递有关。

main 的典型原型是

int main(int argument_count, char *arg_list[], ...);

调用my_exe 5会将第一个参数x(argument_count)设置为2,而下一个未使用参数

arg_list[0] = "my_exe",  // the first (0th) argument is the executable name
arg_list[1] = "5"        // rest of parameters as arrays of chars

调用my_exe不带参数集x = 1YES

另外,如果参数x 是字符'5',十进制值为53 (0x35),则结果为YES。这将是一种非常规的行为,但在某些未公开的 IDE 或编码框架中肯定是可能的。

【讨论】:

  • 尝试将printf("YES");更改为printf("YES %d", x);
【解决方案2】:

由于参数是一个 int,那么除法余数将被保留。那就是:5 / 2 将导致 2。然后 2 mod 2 会给你一个零。您应该 dp 只是将 x % 2 放在“if”语句中。因此,使用 5 % 2 会给您一个“1”,然后与 0 不同

【讨论】:

    【解决方案3】:
    if((x/2) % 2 == 0)
    

    这个条件就是为什么你得到yes for 5 因为5/22(因为它是int)而2%20

    这样就行了 -

    if(x%2==0)
    

    【讨论】:

    • 他想要被 4 整除,而不是 2,因为除以 2 后仍然是偶数
    【解决方案4】:

    由于您正在使用整数执行操作,(5/2)=2,因此您得到“YES”作为输出。
    试试这个代码

    int main (int x) {
        if(x % 4 == 0) {
            printf("YES");
        }else {
            printf("NO");
        }
        return 0;
    }


    如果条件为真,则表示两半也是偶数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 2021-12-29
      • 2017-08-20
      • 1970-01-01
      • 2011-05-27
      相关资源
      最近更新 更多