yueyufeng 发表于 2024-4-4 08:08:29

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

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

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=x/y;
   b=x/(y+1)+1;
   minn=min(minn,a);
   maxx=max(maxx,b);
}
cout<<maxx<<' '<<minn;
return 0;
}
#include <bits/stdc++.h>
using namespace std;

long long int a, b;

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 = x / y;
      b = x / (y + 1) + 1;
    }
    sort(a, a + n);
    sort(b, b + n, jiang);
    cout << b << ' ' << a;
    return 0;
}

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

yueyufeng 发表于 2024-4-4 08:10:27

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


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

using namespace std;

int a, b;

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 = x / y;
      b = x / (y + 1) + 1;
    }
    sort(a, a + n);
    sort(b, b + n, jiang);
    cout << b << ' ' << a;
    return 0;
}

FishC 发表于 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;
    int* b = new int;
    for (int i = 0; i < n; i++) {
      int x, y;
      cin >> x >> y;
      a = x / y;
      b = x / (y + 1) + 1;
    }
    sort(a, a + n);
    sort(b, b + n, jiang);
    for (int i = 0; i < n; i++) {
      cout << a << " ";
    }
    cout << endl;
    for (int i = 0; i < n; i++) {
      cout << b << " ";
    }
    cout << endl;
    delete[] a;
    delete[] b;
    return 0;
}

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 第一种算法对,为什么第二个不对