我试着改变了很多整数,但是它没有起作用,它给了我一个像53289432这样的随机数,让我输入3:5,1,2,它应该输出3,因为5-2是3。
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int x[n];
int mn;
int mx;
for(int i=1;i<n;i++)
{
cin>>x[i];
for(int j=1;j<n;j++)
{
if(x[i]>x[j]);
}
{
x[i]=mn;
}
}
for(int i=1;i<n;i++)
{
for(int j=1;j<n;j++)
{
if(x[i]<x[j]);
}
{
x[i]=mx;
}
}
cout<<mx-mn;
}发布于 2022-03-21 16:24:26
你不需要数组:
int smallest = 0;
int largest = 0;
std::cout << "Enter quantity: ";
int quantity;
std::cin >> quantity;
if (quantity < 1)
{
std::cerr << "Invalid quantity.\n";
return 1;
}
std::cout << "Enter number: ";
std::cin >> smallest;
largest = smallest;
for (int i = 1; i < quantity; ++i)
{
std::cout << "Enter number: ";
int number;
std::cin >> number;
if (number < smallest) smallest = number;
if (number > largest) largest = number;
}
std::cout << "maximum from minimum: " << (smallest - largest) << "\n";
std::cout << "minimum from maximum: " << (largest - smallest) << "\n";上面的代码使用正在运行的最小/最大值,因此不需要数组。
不需要可变长度数组,也不需要在编译时计算数组容量。
发布于 2022-03-24 16:45:54
你的代码有几个漏洞,
首先,
for(int i=1;i<n;i++)
{
cin>>x[i];这不需要n个整数,它只接受(n-1)整数作为输入。对于n个整数,您需要初始化i=0;
第二,
for(int i=1;i<n;i++)
{
cin>>x[i];
for(int j=1;j<n;j++)
{
if(x[i]>x[j]); //This will compare with garbage when i=1 and j>1
}
{
x[i]=mn;
}
}您的比较只对i=1 and j=1的第一次迭代有效,在j>1之后,它将选择垃圾值,因为您还没有接受任何输入。
建议首先获取所有输入,然后进行比较或其他操作。
这里是我的解决方案
我想这就是你想要做的!
#include <iostream>
#include <climits>
using namespace std;
int main()
{
int n;
cin>>n;
int x[n];
int mn;
int mx;
//First take the inputs in array x
for(int i=0;i<n;i++)
{
cin>>x[i];
}
//Find maximum and store it in mx
mx = INT_MIN; //This stores minimum in mx variable (climits)
for(int j=0;j<n;j++)
{
if(mx<x[j])
mx=x[j];
}
//Find minimum and store it in mn
mn = INT_MAX; //This stores maximum in mn variable (climits)
for(int j=0;j<n;j++)
{
if(mn>x[j])
mn=x[j];
}
int ans = mx - mn;
cout<<ans<<endl;
}在不使用额外空间(数组)的情况下,有一个更好的解决方案,只要使用两个变量,就可以找到不同之处。但是,我建议您首先理解这个概念,并看看数组是如何工作的,然后再转向任何优化的解决方案。
https://stackoverflow.com/questions/71560702
复制相似问题