ice_breaking1 2024-08-07 11:29 采纳率: 0%
浏览 5

?我感觉两段代码一样,为什么第一段代码是对的,第二段代码会出现有案例错误,搞不懂

这两段代码就int mx;一个定义在main外,一个在main里,why?有什么不同吗?为什么第一段代码是对的,第二段代码会出现有案例错误,搞不懂

#include<bits/stdc++.h>
using namespace std;
const int N = 2e3 + 9;
int mx;
int main()
{
    int k,n;
    int v[N], w[N];
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin >> n >> k;
    for(int i = 1; i <= n; i++)
        cin >> v[i] >> w[i];
 
   for(int s=2000;s>=0;s--)
   {
       int weight=(1<<20)-1;
       for(int i=1;i<=n;i++)
       {
           if((s&w[i])==s)
           {
               weight=weight&v[i];
           }
       }
       if(weight<=k)
       {
         
           mx=s;
           break;
       }
   }
    cout<<mx;
    return 0;
}

img


#include<bits/stdc++.h>
using namespace std;
const int N = 2e3 + 9;
int main()
{
    int k,n,mx;
    int v[N], w[N];
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin >> n >> k;
    for(int i = 1; i <= n; i++)
        cin >> v[i] >> w[i];
 
   for(int s=2000;s>=0;s--)
   {
       int weight=(1<<20)-1;
       for(int i=1;i<=n;i++)
       {
           if((s&w[i])==s)
           {
               weight=weight&v[i];
           }
       }
       if(weight<=k)
       {
         
           mx=s;
           break;
       }
   }
    cout<<mx;
    return 0;
}


![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/f963a09415b34da38fdc3b7f68eef62a.png "#left")



![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/d1c84cc6a1e14ab5b80b4c01159f1782.png "#left")



  • 写回答

1条回答 默认 最新

  • 梦幻精灵_cq 2024-08-07 12:09
    关注

    比对代码这种“费力”的事,擎起ai就好。😋😋自己负责查验就好。


    • 您看看我的学习搭子的回怼,是不是正确(我仅会点点python😅)

      img

    经过再次比较,两段代码的逻辑结构是相同的,但是存在一些差异:

    1. 在代码一中,mx 被声明为全局变量,而在代码二中,mx 被声明为局部变量,并且在声明时没有初始化。这是一个潜在的问题,因为局部变量如果不初始化,其值将是未定义的。

    2. 在代码二中,mx 应该在使用前初始化,否则可能会导致输出未定义的结果。正确的做法是在声明 mx 时给它一个初始值,例如 int k, n, mx = 0;

    除了上述差异外,代码的其他部分看起来是相同的。下面是代码二中修复了 mx 初始化问题的版本:

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 2e3 + 9;
    int main()
    {
        int k, n, mx = 0; // 初始化 mx
        int v[N], w[N];
        ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
        cin >> n >> k;
        for(int i = 1; i <= n; i++)
            cin >> v[i] >> w[i];
        for(int s = 2000; s >= 0; s--)
        {
            int weight = (1<<20)-1;
            for(int i = 1; i <= n; i++)
            {
                if((s & w[i]) == s)
                {
                    weight = weight & v[i];
                }
            }
            if(weight <= k)
            {
                mx = s;
                break;
            }
        }
        cout << mx;
        return 0;
    }
    

    请注意,两个代码中的循环 for(int s=2000;s>=0;s--) 可能不是最优的,因为这里假设了 s 的最大值为2000。如果输入数据的大小超出了这个范围,那么代码可能不会按预期工作。你应该确保这个循环的范围与你的问题的实际需求相匹配。

    总的来说,除了上述提到的初始化问题,两段代码的逻辑是相同的,并且如果假设 s 的最大值为2000是合理的,那么它们都应该能正确地工作。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 8月7日

悬赏问题

  • ¥15 Workbench中材料库无法更新,如何解决?
  • ¥20 如何推断此服务器配置
  • ¥15 关于github的项目怎么在pycharm上面运行
  • ¥15 内存地址视频流转RTMP
  • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败