c++代码实现“1038: 绝对值最大 ”

问题描述:

输入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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还不秃顶的计科生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值