鱼C论坛

 找回密码
 立即注册
查看: 447|回复: 3

第一种算法对,为什么第二个不对

[复制链接]
发表于 2024-4-4 08:08:29 | 显示全部楼层 |阅读模式

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

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

x
为什么第一种算法对,为什么第二个不对
#include <bits/stdc++.h>
using namespace std;
int a[1050],b[1050];

int main(){
  int n;
  cin>>n;
  int minn=1e9,maxx=-1;
  for(int i=1;i<=n;i++){
    int x,y;
    cin>>x>>y;
   a[i]=x/y;
   b[i]=x/(y+1)+1;
   minn=min(minn,a[i]);
   maxx=max(maxx,b[i]);
  }
  cout<<maxx<<' '<<minn;
  return 0;
}
#include <bits/stdc++.h>
using namespace std;

long long int a[1050], b[1050];

bool jiang(long long int a, long long int b) {
    return a > b;
}

int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        long long int x, y;
        cin >> x >> y;
        a[i] = x / y;
        b[i] = x / (y + 1) + 1;
    }
    sort(a, a + n);
    sort(b, b + n, jiang);
    cout << b[0] << ' ' << a[0];
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-4 08:08:38 | 显示全部楼层
第一种算法是正确的,因为它使用了一个循环来遍历输入的数字,并找到最小值和最大值。它通过比较当前数值与已经找到的最小值和最大值来更新它们。

而第二个算法是错误的。首先,在循环中没有输入语句,所以我们无法读取输入的数字。其次,在循环体中,使用了x、y、a和b这些未定义的变量。在计算minn和maxx时,应该使用的是a和b这两个变量。

另外,你在最后的输出语句中,传递的应该是变量a和b的指针,而不是整型数组。

以下是修正后的代码:
#include <iostream>
#include <algorithm>
using namespace std;

int main(){
  int n;
  cin >> n;
  int minn = 1e9, maxx = -1;
  for(int i=0; i<n; ++i){
    int x, y;
    cin >> x >> y;
    int a = x / y;
    int b = x / (y + 1) + 1;
    minn = min(minn, a);
    maxx = max(maxx, b);
  }
  cout << minn << " " << maxx;
  return 0;
}

希望这次解答能够满足你的期望!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-4 08:10:27 | 显示全部楼层
FishC 发表于 2024-4-4 08:08
第一种算法是正确的,因为它使用了一个循环来遍历输入的数字,并找到最小值和最大值。它通过比较当前数值与 ...


这种为什么不对#include <bits/stdc++.h>

using namespace std;

int a[1050], b[1050];

bool jiang( int a, int b) {
    return a > b;
}

int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        int x, y;
        cin >> x >> y;
        a[i] = x / y;
        b[i] = x / (y + 1) + 1;
    }
    sort(a, a + n);
    sort(b, b + n, jiang);
    cout << b[0] << ' ' << a[0];
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-4 08:10:45 | 显示全部楼层
yueyufeng 发表于 2024-04-04 08:10
这种为什么不对#include

using namespace std;

...


这段代码存在几个问题:

1. 在使用 `sort` 函数对数组 `a` 和 `b` 进行排序时,只定义了两个整数变量 `a` 和 `b`,并没有定义数组。因此,代码会出现编译错误。

2. `sort` 函数需要接受一个表示区间的指针参数,而不是单个变量。在这里,应该传递数组的指针和数组长度作为参数。

3. 定义了一个 `jiang` 函数用于比较两个整数的大小,但在调用 `sort` 函数时没有传递该函数作为比较函数的参数,导致排序可能无法按照预期进行。

下面是修正后的代码:
#include <iostream>
#include <algorithm>
using namespace std;

bool jiang(int a, int b) {
    return a > b;
}

int main() {
    int n;
    cin >> n;
    int* a = new int[n];
    int* b = new int[n];
    for (int i = 0; i < n; i++) {
        int x, y;
        cin >> x >> y;
        a[i] = x / y;
        b[i] = x / (y + 1) + 1;
    }
    sort(a, a + n);
    sort(b, b + n, jiang);
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    cout << endl;
    for (int i = 0; i < n; i++) {
        cout << b[i] << " ";
    }
    cout << endl;
    delete[] a;
    delete[] b;
    return 0;
}

在修正后的代码中,我们使用了 `new` 运算符来动态分配数组 `a` 和 `b` 的内存空间,并且在程序结束后使用 `delete[]` 来释放这些内存空间。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 19:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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