第一种算法对,为什么第二个不对
为什么第一种算法对,为什么第二个不对#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;
} 第一种算法是正确的,因为它使用了一个循环来遍历输入的数字,并找到最小值和最大值。它通过比较当前数值与已经找到的最小值和最大值来更新它们。
而第二个算法是错误的。首先,在循环中没有输入语句,所以我们无法读取输入的数字。其次,在循环体中,使用了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 小助理,如未能正确解答您的问题,请继续追问。 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;
}
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]