问题描述:
输入3个整数,输出绝对值最大的那个数。
输入:
输入包含3个int范围内的整数,用空格隔开。
输出:
输出三个数中绝对值最大的数,单独占一行。若绝对值最大的数不唯一,则输出最先出现的那个。例如,若输入为1 -3 3,则输出为-3;若输入为1 3 -3则输出为3。
代码实现:
#include<iostream>
using namespace std;
#include<iomanip>
#include<vector>
#include<algorithm>
void output(vector<int> arr)
{
for(int i=0;i<arr.size();i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
bool bijiao(int first,int second)
{
if(first>=second)
{
return true;
}
else
{
return false;
}
}
int main()
{
int x,y,z;
cin>>x>>y>>z;
vector<int>before={x,y,z};
vector<int>after1={x,y,z};
vector<int>after2={x,y,z};
vector<int>flag={0,0,0};//0代表初始化,1代表为正,-1代表为负
for(int i=0;i<before.size();i++)
{
if(before[i]<0)
{
after1[i]=-after1[i];
after2[i]=-after2[i];
flag[i]=-1;
}
else
{
flag[i]=1;
}
}
//output(before);
//output(after1);
//output(after2);
//output(flag);
sort(after2.begin(),after2.end(),bijiao);
//output(after2);
int max_value=after2[0];
int max_index;
for(int i=0;i<after1.size();i++)
{
if(after1[i]==max_value)
{
max_index=i;
break;
}
}
if(flag[max_index]==1)
{
cout<<max_value<<endl;
}
if(flag[max_index]==-1)
{
cout<<-(max_value)<<endl;
}
}
效果:
①输入(1,-3,2),绝对值最大的为-3
②(1,-3,3),绝对值最大的为-3(排在前面)
③(1,3,-3),绝对值最大的为3(排在前面)
代码解析:
(1)定义数组
int x,y,z;
cin>>x>>y>>z;
vector<int>before={x,y,z};
vector<int>after1={x,y,z};
vector<int>after2={x,y,z};
vector<int>flag={0,0,0};//0代表初始化,1代表为正,-1代表为负
for(int i=0;i<before.size();i++)
{
if(before[i]<0)
{
after1[i]=-after1[i];
after2[i]=-after2[i];
flag[i]=-1;
}
else
{
flag[i]=1;
}
}
before数组:是最开始输入数据的数组,没有改动;
after1数组:是加完绝对值之后的数组;
after2数组:跟after1的不同是,after2是排序后的数组;
flag数组:记录原始数据元素的正负;
(2)排序
sort(after2.begin(),after2.end(),bijiao);
after2调用sort函数进行排序。
(3)获取最大值
int max_value=after2[0];
(4)获取最大值对应的索引
int max_index;
for(int i=0;i<after1.size();i++)
{
if(after1[i]==max_value)
{
max_index=i;
break;
}
}
注意点:
输出绝对值最大的这一个数(靠前面的数),靠的是break;
(5)看下这个索引下对应的值是正还是负并输出加绝对值前的最大值
if(flag[max_index]==1)
{
cout<<max_value<<endl;
}
if(flag[max_index]==-1)
{
cout<<-(max_value)<<endl;
}