0025-数组中和最小的-数字对以及和
题目描述:
输入n个数–求这n个数中,和的绝对值最小的数字以及其对应的和
样例:
输入
-1 -3 7 5 11 15
输出
-3 5 2
C++代码
//
// Created by HANWENKE on 2022/9/6.
//
#include <iostream>
#include <vector>
#include <sstream>
using namespace std;
int main(){
string ss;
getline(cin,ss);
istringstream s1(ss);
int temp;
vector<int>arr1;
while(s1>>temp){
arr1.push_back(temp);
}
int min=INT32_MAX;
int a=0;
int b=0;
for(int i=0;i<arr1.size();i++){
for(int j=0;j<arr1.size();j++){
int sum=arr1[i]+arr1[j];
if(sum<0)
sum=-sum;
if(i!=j&&sum<min){
a=arr1[i];
b=arr1[j];
min=sum;
}
}
}
cout<<a<<" "<<b<<" "<<min;
return 0;
}
0026-黑板报数字涂色
题目描述:
疫情过后希望小学终于又重新开学了
3年2班开学第一天的任务是
将后面的黑板报重新制作
黑板上已经写上了N个正整数
同学们需要给这每个数分别上一种颜色
为了让黑板报既美观又有学习意义
老师要求同种颜色的所有数都可以被这个颜色中最小的那个数整除
现在帮小朋友们算算最少需要多少种颜色,给这N个数进行上色
输入输出描述
输入描述
第一行有一个正整数N
其中 1 <= n <=100
第二行有N个int型数,保证输入数据在[1,100]范围中
表示黑板上各个正整数的值
输出描述
输出只有一个整数,为最少需要的颜色种数
样例
输入
3
2 4 6
输出
1
说明:
所有数都能被2整除
输入
4
2 3 4 9
输出
2
说明:
2与4涂一种颜色,4能被2整除
3与9涂另一种颜色,9能被3整除
不能涂同一种颜色
C++代码
//
// Created by HANWENKE on 2022/9/6.
//
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n;
cin>>n;
vector<int>arr1;
arr1.reserve(n);
int temp;
for(int i=0;i<n;i++){
cin>>temp;
arr1.push_back(temp);
}
sort(arr1.begin(),arr1.end());
int res=0;
for(int i=0;i<arr1.size();i++){
res++;
for(int j=i+1;j<arr1.size();){
//如果后面数字是前面数字的倍数--之间删除这个元素
if(arr1[j]%arr1[i]==0){
arr1.erase(arr1.begin()+j);
}else{
j++;
}
}
}
cout<<res;
return 0;
}
0027-十进制数字最低位排序
题目描述:
给定一个非空数组(列表)
起元素数据类型为整型
请按照数组元素十进制最低位从小到大进行排序
十进制最低位相同的元素,相对位置保持不变
当数组元素为负值时,十进制最低为等同于去除符号位后对应十进制值最低位
输入:输出描述
输入描述
给定一个非空数组(列表)
其元素数据类型为32位有符号整数
数组长度为[1,1000]
输出排序后的数组
输入
1,2,5,-21,22,11,55,-101,42,8,7,32
输出
1,-21,11,-101,2,22,42,32,5,55,7,8
C++代码
//
// Created by HANWENKE on 2022/9/6.
//
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
bool cmp(pair<int,int>&a,pair<int,int>&b){
if(a.first<b.first){
return true;
}else if(a.first==b.first&&a.second<b.second){
return true;
}
return false;
}
int main(){
vector<int>arr1;
int temp=0;
while(1){
cin>>temp;
arr1.push_back(temp);
if(getchar()=='\n')break;
}
//排序要求--最后一个数字的大小,如果数字大小相同的时候,按照输入顺序排序--
//所以需要记录输入的顺序--以及最后一个数字
unordered_map<int,int>ismap;
vector<pair<int,int>>arr2(arr1.size());
for(int i=0;i<arr1.size();i++){
//将数字转化位字符串
string ss= to_string(arr1[i]);
//获取字符串的最后一个字符
char c=ss[ss.length()-1];
//用字符减去数字0转为位数字
temp= c-'0';
//first保存最后一位数,second,保存位置
arr2[i].first=temp;
arr2[i].second=i+1;
//用无序map来记录数字--最后用于数字的输出
ismap[i+1]=arr1[i];
}
sort(arr2.begin(),arr2.end(),cmp);
for(int i=0;i<arr2.size();i++){
cout<<ismap[arr2[i].second]<<" ";
}
return 0;
}
0028-最大n个数和最小n个数之和
题目描述
给定一个数组
编写一个函数
来计算他的最大N个数和最小N个数的和
需要对数组进行去重
说明
说明
第一行输入M
M表示数组大小
第二行输入M个数
表示数组内容
第三行输入N表示需要计算的最大最小N的个数
输出输出说明
例一:
输入
5
95 88 83 64 100
2
输出
342
说明
最大2个数[100 95] 最小2个数[83 64]
输出342
例二
输入
5
3 2 3 4 2
2
输出
-1
说明
最大两个数是[4 3]最小2个数是[3 2]
有重叠输出为-1
C++代码
//
// Created by HANWENKE on 2022/9/6.
//
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n;
cin>>n;
vector<int>arr1(n);
int temp=0;
for(int i=0;i<n;i++){
cin>>temp;
arr1[i]=temp;
}
int count=0;
cin>>count;
sort(arr1.begin(),arr1.end());
//将不重复的元素移动到前面来
auto newsize= unique(arr1.begin(),arr1.end());
//删除重复的元素
arr1.erase(newsize,arr1.end());
//如果元素的个数大于元素个数的一半,那么肯定有重叠--直接返回-1
if(count>arr1.size()/2){
cout<<-1;
return 0;
}
int res=0;
for(int i=0,j=arr1.size()-1;i<j;i++,j--){
res+=arr1[i];
res+=arr1[j];
}
cout<<res;
return 0;
}