鱼C论坛

 找回密码
 立即注册
查看: 785|回复: 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;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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

以下是修正后的代码:

  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;

  4. int main(){
  5.   int n;
  6.   cin >> n;
  7.   int minn = 1e9, maxx = -1;
  8.   for(int i=0; i<n; ++i){
  9.     int x, y;
  10.     cin >> x >> y;
  11.     int a = x / y;
  12.     int b = x / (y + 1) + 1;
  13.     minn = min(minn, a);
  14.     maxx = max(maxx, b);
  15.   }
  16.   cout << minn << " " << maxx;
  17.   return 0;
  18. }
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://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;
}
小甲鱼最新课程 -> https://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` 函数时没有传递该函数作为比较函数的参数,导致排序可能无法按照预期进行。

下面是修正后的代码:

  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;

  4. bool jiang(int a, int b) {
  5.     return a > b;
  6. }

  7. int main() {
  8.     int n;
  9.     cin >> n;
  10.     int* a = new int[n];
  11.     int* b = new int[n];
  12.     for (int i = 0; i < n; i++) {
  13.         int x, y;
  14.         cin >> x >> y;
  15.         a[i] = x / y;
  16.         b[i] = x / (y + 1) + 1;
  17.     }
  18.     sort(a, a + n);
  19.     sort(b, b + n, jiang);
  20.     for (int i = 0; i < n; i++) {
  21.         cout << a[i] << " ";
  22.     }
  23.     cout << endl;
  24.     for (int i = 0; i < n; i++) {
  25.         cout << b[i] << " ";
  26.     }
  27.     cout << endl;
  28.     delete[] a;
  29.     delete[] b;
  30.     return 0;
  31. }
复制代码


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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-10 16:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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