Gordon1 发表于 2024-8-23 23:21:11

这个为什么运行会报错

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll x;
ll n,c;
ll l,r;
bool check(int x)
{
        ll now=1;
        ll num=1;
        for(int i=2;i<=n;++i)
        {
                if(x>=x+x)
                {
                        num++;
                        now=i;
                }
        }
        if(num>=c)
                return 1;
        return 0;
}
int main()
{
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin>>n>>c;
        for(int i=1;i<=n;++i)
        {
                cin>>x;
        }
        sort(x+1,x+n+1);
        l=1;
        r=x-x;
        ll mid;
        while(l<=r)
        {
                mid=(l+r)/2;
                if(check(mid)==1)
                {
                        l=mid;
                }
                else
                {
                        r=mid;
                }
        }
        cout<<l;
        return 0;
}
第13行出现了一个 invalid types 'int' for array subscript,还有一个 invalid types 'int' for array subscript

FishC 发表于 2024-8-23 23:21:22

看起来你的代码有几处语法和逻辑上的错误,导致编译失败。我们一起来简化和逐步修正一下:

1. `#include` 后面缺少头文件,需要补充你要用到的头文件,比如 `<iostream>` 和 `<algorithm>`。
2. `check` 函数中的 for 循环条件写错了,应该是 `i <= x;` 而不是 `i = x + x`。
3. `check` 函数的结尾花括号位置错了,导致逻辑错误。
4. `main` 函数中 `for(int i=1; i>x;` 中的 `>` 应该是 `<`。
5. `main` 函数中 `r=x-x;` 逻辑错误,应该明确 `r` 的值。
6. 最后 `while` 循环中缺少右括号。

这里是修正后的代码:

#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;

ll x;// 假定n的最大值为100000
ll n, c;
ll l, r;

bool check(ll dist) {
    ll now = x;
    ll num = 1;// 初始位置已经放置了一个

    for (int i = 1; i < n; ++i) {
      if (x - now >= dist) {
            num++;
            now = x;
      }
    }

    return num >= c;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
   
    cin >> n >> c;
    for (int i = 0; i < n; ++i) {
      cin >> x;
    }
    sort(x, x + n);

    l = 1;
    r = x - x;
    ll ans = 0;

    while (l <= r) {
      ll mid = (l + r) / 2;
      if (check(mid)) {
            ans = mid;
            l = mid + 1;
      } else {
            r = mid - 1;
      }
    }
    cout << ans << endl;
    return 0;
}

我们在此进行了以下修正:
1. 添加了正确的头文件 `<iostream>` 和 `<algorithm>`。
2. 修改了 `check` 函数的逻辑,使其正确判断。
3. 修改了 `main` 函数中的循环条件和变量赋值正确区间。
4. 增加了数组 `x` 的定义,以保证能够存储输入的数据。

这样修改后,应该可以正常运行了。希望对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 这个为什么运行会报错