鱼C论坛

 找回密码
 立即注册
查看: 529|回复: 1

[已解决]这个为什么运行会报错

[复制链接]
发表于 2024-8-23 23:21:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. ll x[100010];
  5. ll n,c;
  6. ll l,r;
  7. bool check(int x)
  8. {
  9.         ll now=1;
  10.         ll num=1;
  11.         for(int i=2;i<=n;++i)
  12.         {
  13.                 if(x[i]>=x[now]+x)
  14.                 {
  15.                         num++;
  16.                         now=i;
  17.                 }
  18.         }
  19.         if(num>=c)
  20.                 return 1;
  21.         return 0;
  22. }
  23. int main()
  24. {
  25.         ios::sync_with_stdio(false);
  26.         cin.tie(0);
  27.         cin>>n>>c;
  28.         for(int i=1;i<=n;++i)
  29.         {
  30.                 cin>>x[i];
  31.         }
  32.         sort(x+1,x+n+1);
  33.         l=1;
  34.         r=x[n]-x[1];
  35.         ll mid;
  36.         while(l<=r)
  37.         {
  38.                 mid=(l+r)/2;
  39.                 if(check(mid)==1)
  40.                 {
  41.                         l=mid;
  42.                 }
  43.                 else
  44.                 {
  45.                         r=mid;
  46.                 }
  47.         }
  48.         cout<<l;
  49.         return 0;
  50. }
复制代码

第13行出现了一个[Error] invalid types 'int[int]' for array subscript,还有一个[Error] invalid types 'int[long long int]' for array subscript
最佳答案
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` 循环中缺少右括号。

这里是修正后的代码:

  1. #include <iostream>
  2. #include <algorithm>
  3. #define ll long long
  4. using namespace std;

  5. ll x[100005];  // 假定n的最大值为100000
  6. ll n, c;
  7. ll l, r;

  8. bool check(ll dist) {
  9.     ll now = x[0];
  10.     ll num = 1;  // 初始位置已经放置了一个

  11.     for (int i = 1; i < n; ++i) {
  12.         if (x[i] - now >= dist) {
  13.             num++;
  14.             now = x[i];
  15.         }
  16.     }

  17.     return num >= c;
  18. }

  19. int main() {
  20.     ios::sync_with_stdio(false);
  21.     cin.tie(0);
  22.    
  23.     cin >> n >> c;
  24.     for (int i = 0; i < n; ++i) {
  25.         cin >> x[i];
  26.     }
  27.     sort(x, x + n);

  28.     l = 1;
  29.     r = x[n - 1] - x[0];
  30.     ll ans = 0;

  31.     while (l <= r) {
  32.         ll mid = (l + r) / 2;
  33.         if (check(mid)) {
  34.             ans = mid;
  35.             l = mid + 1;
  36.         } else {
  37.             r = mid - 1;
  38.         }
  39.     }
  40.     cout << ans << endl;
  41.     return 0;
  42. }
复制代码


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 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` 循环中缺少右括号。

这里是修正后的代码:

  1. #include <iostream>
  2. #include <algorithm>
  3. #define ll long long
  4. using namespace std;

  5. ll x[100005];  // 假定n的最大值为100000
  6. ll n, c;
  7. ll l, r;

  8. bool check(ll dist) {
  9.     ll now = x[0];
  10.     ll num = 1;  // 初始位置已经放置了一个

  11.     for (int i = 1; i < n; ++i) {
  12.         if (x[i] - now >= dist) {
  13.             num++;
  14.             now = x[i];
  15.         }
  16.     }

  17.     return num >= c;
  18. }

  19. int main() {
  20.     ios::sync_with_stdio(false);
  21.     cin.tie(0);
  22.    
  23.     cin >> n >> c;
  24.     for (int i = 0; i < n; ++i) {
  25.         cin >> x[i];
  26.     }
  27.     sort(x, x + n);

  28.     l = 1;
  29.     r = x[n - 1] - x[0];
  30.     ll ans = 0;

  31.     while (l <= r) {
  32.         ll mid = (l + r) / 2;
  33.         if (check(mid)) {
  34.             ans = mid;
  35.             l = mid + 1;
  36.         } else {
  37.             r = mid - 1;
  38.         }
  39.     }
  40.     cout << ans << endl;
  41.     return 0;
  42. }
复制代码


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-10 09:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表