首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择一个数字,比如3,这样您就可以输入3个数字,然后从最小值减去最大值。

选择一个数字,比如3,这样您就可以输入3个数字,然后从最小值减去最大值。
EN

Stack Overflow用户
提问于 2022-03-21 16:13:47
回答 2查看 58关注 0票数 -2

我试着改变了很多整数,但是它没有起作用,它给了我一个像53289432这样的随机数,让我输入3:5,1,2,它应该输出3,因为5-2是3。

代码语言:javascript
复制
#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;
 
 
 
}
EN

回答 2

Stack Overflow用户

发布于 2022-03-21 16:24:26

你不需要数组:

代码语言:javascript
复制
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";

上面的代码使用正在运行的最小/最大值,因此不需要数组。

不需要可变长度数组,也不需要在编译时计算数组容量。

票数 1
EN

Stack Overflow用户

发布于 2022-03-24 16:45:54

你的代码有几个漏洞,

首先,

代码语言:javascript
复制
for(int i=1;i<n;i++)
{ 
  cin>>x[i];

这不需要n个整数,它只接受(n-1)整数作为输入。对于n个整数,您需要初始化i=0

第二,

代码语言:javascript
复制
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之后,它将选择垃圾值,因为您还没有接受任何输入。

建议首先获取所有输入,然后进行比较或其他操作。

这里是我的解决方案

我想这就是你想要做的!

代码语言:javascript
复制
#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;
 
}

在不使用额外空间(数组)的情况下,有一个更好的解决方案,只要使用两个变量,就可以找到不同之处。但是,我建议您首先理解这个概念,并看看数组是如何工作的,然后再转向任何优化的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71560702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档