题目1(如下截图所示):
分析:一个排序问题
C++实现:
#include<iostream>
using namespace std;
void insertSort(int *a,int *b,int n){
int tmp_a,tmp_b;//监视哨
for(int i=1;i<n;i++){
if(b[i]<b[i-1]){
tmp_b=b[i];
tmp_a=a[i];
for(int j=i-1;b[j]>tmp_b&&j>=0;j--){
b[j+1]=b[j];
a[j+1]=a[j];
}
b[j+1]=tmp_b;
a[j+1]=tmp_a;
}
}
}
int main(){
int n,r,avg,res=0;
cin>>n;
cin>>r;
cin>>avg;
int a[100000],b[100000],sum=0;
for(int k=0;k<n;k++){
cin>>a[k];
cin>>b[k];
sum+=a[k];
}
int diss=avg*n-sum;
insertSort(a,b,n);
for(k=0;k<n;k++){
int s=a[k];
while(s<n&&diss>0){
res+=b[k];
s++;
diss--;
}
}
/*
for(k=0;k<n;k++){
cout<<a[k]<<b[k]<<endl;
}
*/
cout<<res<<endl;
return 0;
}
结果:
题目3(如下截图所示):
分析:先排序,再去重
C++实现:
#include<iostream>
#include<math.h>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int n,ct=0;
cin>>n;
vector<int> d(n,-1);
for(int i=0;i<n;i++)
cin>>d[i];
sort(d.begin(),d.end());
for(i=1;i<n;i++){
if(d[i]==d[i-1]){
ct+=1;
}
}
cout<<d.size()-ct<<endl;
for(i=1;i<n;i++){
if(d[i]!=d[i-1])
cout<<d[i]<<" ";
}
return 0;
}
结果:
题目2(如下截图所示):
分析:交换排序问题,求最少交换次数;没看懂题目给的提示。