【问题标题】:Why is this code printing different numbers even when the input is same?为什么即使输入相同,此代码也会打印不同的数字?
【发布时间】:2018-03-10 03:07:22
【问题描述】:

我正在尝试解决这个问题: http://codeforces.com/problemset/problem/888/A

我写了以下代码:

#include <stdio.h>

int main(void) 
{
    int a, i, q, count;

    scanf("%d ", &q);

    int ar[q];

    for (i = 0; i < q; i++)
    {
        scanf("%d ", &ar[i]);
    }

    for (i = 0; i < q; i++)
    {
        if (i != q - 1 && i != 0)
        {
            if (((ar[i] < ar[i + 1]) && (ar[i] < ar[i - 1])))
            {
                count++;
            }
            else if (((ar[i] > ar[i + 1]) && (ar[i] > ar[i - 1])))
            {
                count++;
            }
        }
    }
    printf("%d", count);
    return 0;
}

当我使用第一个测试用例运行程序时,它会打印随机数。 当我再次运行它时,它会打印出不同的随机数。

我查找了解决方案: https://github.com/Waqar-107/Codeforces/blob/master/A-set/888A.Local%20Extrema.py

那段代码不正是我写的吗?为什么我的代码打印出奇怪的东西? 提前致谢。

【问题讨论】:

  • 这可能是因为你有一个错误。拿一个调试器检查你的程序(或者用笔和纸在心里复习一下算法。)
  • 你永远不会初始化count
  • 未初始化的局部变量会有一个看起来几乎是随机的indeterminate值。根据类型和看似随机的值,使用它甚至可能导致未定义的行为
  • 旧版本的 c 不一定支持使用变量作为长度来初始化数组。尝试确保您的编译器支持并设置为使用现代标准进行编译,或者使用文字设置数组的长度。数据的最大长度通常在 codeforces 上说明,因此您可以使用它。

标签: c


【解决方案1】:

您应该将变量count 初始化为零:

#include <stdio.h>

int main(void) 
{
int a, i, q, count=0;

scanf("%d ", &q);

int ar[q];

for (i = 0; i < q; i++)
{
    scanf("%d ", &ar[i]);
}

for (i = 0; i < q; i++)
{
    if (i != q - 1 && i != 0)
    {
        if (((ar[i] < ar[i + 1]) && (ar[i] < ar[i - 1])))
        {
            count++;
        }
        else if (((ar[i] > ar[i + 1]) && (ar[i] > ar[i - 1])))
        {
            count++;
        }
    }
}
printf("%d", count);
return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2017-03-02
    • 2019-10-03
    • 1970-01-01
    相关资源
    最近更新 更多