第1题 求数位上的数字 时限:1s 空间:256m
老师给出了两个整数N和K,让桐桐求出N 的K次方的结果中的十位数和个位数的数字。请你帮帮桐桐。
输入格式
2个整数N, K(2≤N,K≤100000000 )。
输出格式
两个整数。
输入/输出例子1
输入:
3 6
输出:
2 9
样例解释
3^6=729
#include<bits/stdc++.h>
using namespace std;
long long f(long long yuans,long long mi){
long long ans,t;
ans=1;
t=yuans;
while(mi!=0){
if(mi%2==1)ans=ans*t%100;
t=t*t%100;
mi/=2;
}
return ans;
}
long long n,k;
int main(){
cin>>n>>k;
cout<<f(n,k)/10<<" "<<f(n,k)%10;
return 0;
}
第2题 橘子排队 时限:1s 空间:256m
秋天到了,同学们去橘子园摘橘子。张老师要求同学们把摘好的橘子去掉一个最大的,再去掉一个最小的的橘子,求出剩余的橘子的平均重量,并将剩余的橘子按照由轻到重排序。
输入格式
第一行是橘子的数量n。(1≤n≤200)
第二行是n个正整数,表示这些橘子的重量,数据范围为[1,1000]。
输出格式
第一行输出剩余橘子的平均重量,结果保留1位小数。
第二行输出剩余橘子按照由轻到重排序后的结果。
输入/输出例子1
输入:
5
9 1 2 1 8
输出:
3.7
1 2 8
#include<bits/stdc++.h>
using namespace std;
long long n,a[99999],maxx=0,minn=99999;
double s=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
s+=a[i];
if(a[i]>maxx)maxx=a[i];
if(a[i]<minn)minn=a[i];
}
s-=maxx;
s-=minn;
s=s/(n-2);
printf("%.1lf\n",s);
for(int i=2;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
第3题 平均分 时限:1s 空间:256m
期末考试结束了,黄老师需要计算一下,本班同学们的语文成绩,如果去掉x个最高分和x个最低分,剩余同学的平均分是多少分,请你编程计算一下?
输入格式
第一行有两个整数n和x,n代表分数的总数,x代表要去掉的最高分和最低分的数量(10<=n<=10000,x<n/4)
第二行有n个整数,代表n个同学的分数,数据范围为[0,100]
输出格式
n个分数去掉x个最高分和x个最低分后的平均分,结果保留1位小数
输入/输出例子1
输入:
8 2
1 8 2 6 6 5 3 4
输出:
4.5
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x,a[10000+5],s=0,c=0,z=0;
cin>>n>>x;
for(int i=1;i<=n;i++){
cin>>a[i];
s=s+a[i];
}
sort(a+1,a+n+1);
for(int i=n;i>=n-x+1;i--){
c=c+a[i];
}
for(int i=1;i<=x;i++){
z=z+a[i];
}
s=s-c-z;
double w=n-x*2;
double s1=s/w*1.0;
cout<<fixed<<setprecision(1)<<s1;
return 0;
}
第4题 中位数 时限:1s 空间:256m
中位数指的是一组数,如果按照大小排序排好后最中间的那个数的值,如果有偶数个元素,那么就是最中间两个数的平均数!
比如:2 5 8 1 6,排序后的结果为1 2 5 6 8,那么这组数的中位数就是5!
再比如:8 9 1 2 3 0,排序后的结果为0 1 2 3 8 9,那么这组书的中位数就是(2+3)/2=2.5
输入格式
第一行:一个整数n代表有n个数(n≤100000)
第二行:n个数的值,数据范围为[0,100]
输出格式
中位数(结果保留1位小数)
输入/输出例子1
输入:
5
2 5 8 1 6
输出:
5.0
#include<bits/stdc++.h>
using namespace std;
long long n,a[100005],t=0;
int main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
sort(a+1,a+n+1);
if(n%2==0){
printf("%.1lf",(a[n/2]+a[n/2+1])/2.0);
}
else {
printf("%.1lf",a[n/2+1]/1.0);
}
return 0;
}
第5题 宇航局招聘 时限:1s 空间:256m
宇航局准备招收一批科研人员从事月球探索的航空科研工作。这个职位来了很多应聘者,宇航局对众多应聘者进行综合素质考试,最终会选出x名综合得分排名靠前应聘者。目前考试已经结束了,宇航局需要根据目前考试的成绩计算出,如果要选出x个分数靠前的人,分数线应该划到多少分?请你写一个程序来帮助宇航局计算分数线。
比如:如果有10名选手参加考试,他们的得分如下
100 99 98 97 96 95 94 93 92 91 90
如果要选出3名分数靠前的人,那么分数线应该划在98分。
输入格式
第一行是一个整数n,代表参加考试的人数(n<=1000)
第二行有n个整数,用空格隔开,代表n个人的考试分数(注意:不存在成绩一样的分数)
第三行有一个整数x(x < n),代表宇航局要选出的人数
输出格式
一个整数,代表如果要选出x个人,宇航局应当划出的分数线。
输入/输出例子1
输入:
8
100 90 98 92 85 70 88 96
2
输出:
98
#include<bits/stdc++.h>
using namespace std;
bool cmp(int x,int y){
return x>y;
}
long long n,a[10000],k;
int main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
scanf("%lld",&k);
sort(a+1,a+n+1,cmp);
cout<<a[k];
return 0;
}
第6题 5-5 排名 时限:1s 空间:256m
一年一度的NH小学生程序设计比赛结束啦!组委会公布了所有学生的成绩。现在HuangYongCong想设计一个程序,先将成绩从高到低排,成绩相同则按年级从低到高排,然后查询每个学生有多少人的排名比他高并且年级还低于他?
输入格式
一行一个正整数n(1<=n<=200),表示参赛人数。
第2~n+1行,每行两个正整数,s(0<=s<=400)、g(1<=g<=6),之间用一个空格隔开,分别表示学生的成绩和年级。
输出格式
n行,每行只有一个正整数,其中第i行表示排第i名的学生前面有k个学生排名比他高,且年级比他低。
输入/输出例子1
输入:
5
300 5
200 6
350 4
400 6
250 5
输出:
0
0
1
1
3
#include<bits/stdc++.h>
using namespace std;
long long n,a[10005],b[10005],s;
int main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld%lld",&a[i],&b[i]);
}
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
if(a[i]<a[j]){
swap(a[i],a[j]),swap(b[i],b[j]);
}
else if(a[i]==a[j]){
if(b[i]>b[j]){
swap(a[i],a[j]),swap(b[i],b[j]);
}
}
}
}
cout<<0<<endl;
for(int i=2;i<=n;i++){
s=0;
for(int j=i;j>=1;j--){
if(b[j]<b[i])s++;
}
cout<<s<<endl;
}
return 0;
}
第7题 成绩排序 时限:1s 空间:256m
现有 N(N≤1000) 名同学参加了期末考试,学号依序为1~n。现在老师获得了这1~n号同学的信息:语文、数学、英语成绩(均为不超过 150 的自然数)。请你按成绩降序的顺序输出每位学生各项信息(学号、各科成绩)。如果有多个总分相同的学生,学号小的先输出。
输入格式
第1行输入n;
第2行到n+1行输入三科成绩。
输出格式
成绩降序的顺序输出每位学生各项信息(学号、各科成绩)。如果有多个总分相同的学生,学号小的先输出。
输入/输出例子1
输入:
3
114 51 4
114 10 23
51 42 60
输出:
1 114 51 4
3 51 42 60
2 114 10 23
输入/输出例子2
输入:
3
100 100 100
120 120 120
100 100 100
输出:
2 120 120 120
1 100 100 100
3 100 100 100
#include<bits/stdc++.h>
using namespace std;
struct str{
int cj,xh,x1,x2,x3;
}a[99999];
bool f(str x,str y){
if(x.cj!=y.cj)return x.cj>y.cj;
else return x.xh<y.xh;
}
int n,s,s1,s2;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s>>s1>>s2;
a[i].x1=s;
a[i].x2=s1;
a[i].x3=s2;
a[i].cj=s+s1+s2;
a[i].xh=i;
}
sort(a+1,a+n+1,f);
for(int i=1;i<=n;i++){
cout<<a[i].xh<<" "<<a[i].x1<<" "<<a[i].x2<<" "<<a[i].x3<<endl;
}
return 0;
}
第8题 整数奇偶排序 2 时限:1s 空间:256m
输入10个整数,彼此以空格分隔。重新排序以后输出(也按空格分隔),要求:
1.先输出其中的奇数,并按从大到小排列;
2.然后输出其中的偶数,并按从小到大排列。
输入格式
任意排序的10个整数(0~100),彼此以空格分隔。
输出格式
可能有多组测试数据,对于每组数据,按照要求排序后输出,由空格分隔。
输入/输出例子1
输入:
0 56 19 81 59 48 35 90 83 75
17 86 71 51 30 1 9 36 14 16
输出:
83 81 75 59 35 19 0 48 56 90
71 51 17 9 1 14 16 30 36 86
样例解释
多组数据,注意输出格式
1. 测试数据可能有很多组,请使用while(cin>>a[0]>>a[1]>>...>>a[9])类似的做法来实现;
2. 输入数据随机,有可能相等。
#include<bits/stdc++.h>
using namespace std;
int n=10,a[1005];
int main(){
while(cin>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6]>>a[7]>>a[8]>>a[9]>>a[10]){
sort(a+1,a+n+1);
for(int i=n;i>=1;i--){
if(a[i]%2==1)cout<<a[i]<<" ";
}
for(int i=1;i<=n;i++){
if(a[i]%2==0)cout<<a[i]<<" ";
}
cout<<endl;
}
return 0;
}
第9题 一种排序 时限:1s 空间:256m
现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大);
1.按照编号从小到大排序
2.对于编号相等的长方形,按照长方形的长排序;
3.如果编号和长都相同,按照长方形的宽排序;
4.如果编号、长、宽都相同,就只保留一个长方形用于排序,删除多余的长方形;最后排好序按照指定格式显示所有的长方形。
输入格式
第一行有一个整数 0<n<10,表示接下来有n组测试数据;
每一组第一行有一个整数 0<m<1000,表示有m个长方形;
接下来的m行,每一行有三个数 ,第一个数表示长方形的编号,
第二个和第三个数值大的表示长,数值小的表示宽,相等
说明这是一个正方形(数据约定长宽与编号都小于10000)。
输出格式
顺序输出每组数据的所有符合条件的长方形的 编号、长、宽
输入/输出例子1
输入:
1
8
1 1 1
1 1 1
1 1 2
1 2 1
1 2 2
2 1 1
2 1 2
2 2 1
输出:
1 1 1
1 2 1
1 2 2
2 1 1
2 2 1
#include<bits/stdc++.h>
using namespace std;
long long n,m,i,j,t,a[10000][30];
int main(){
scanf("%lld",&n);
while(n--){
scanf("%lld",&m);
for(i=0;i<m;i++){
scanf("%lld%lld%lld",&a[i][0],&a[i][1],&a[i][2]);
if(a[i][1]<a[i][2]){
t=a[i][1];
a[i][1]=a[i][2];
a[i][2]=t;
}
for(j=0;j<i;j++){
if(a[i][0]==a[j][0]&&a[i][1]==a[j][1]&&a[i][2]==a[j][2])
a[i][0]=0;
}
}
for(i=0;i<m;i++){
if(a[i][0]!=0){
for(j=i+1;j<m;j++){
if((a[i][0]>a[j][0])||(a[i][0]==a[j][0]&&a[i][1]>a[j][1])||(a[i][0]==a[j][0]&&a[i][1]==a[j][1]&&a[i][2]>a[j][2])){
t=a[i][0],a[i][0]=a[j][0],a[j][0]=t,t=a[i][1],a[i][1]=a[j][1],a[j][1]=t,t=a[i][2],a[i][2]=a[j][2],a[j][2]=t;
}
}
}
}
for(i=0;i<m;i++){
if(a[i][0]!=0)printf("%lld %lld %lld\n",a[i][0],a[i][1],a[i][2]);
}
}
return 0;
}
第10题 兔子 时限:1s 空间:256m
明明家养了N只兔子,边上种植了很多胡萝卜。平时兔子都被关在一个大笼子里,每天明明喂每只兔子3根胡萝卜。某天饿疯了的兔子们咬坏了笼子门,跑到地里尽情地吃起胡萝卜。每只兔子的“吃货值”不一样,已知第i只兔子每分钟吃Ei个胡萝卜。明明1分中后发现了情况,急忙开始捉拿这些兔子,已知明明每分钟可以捉一只,请问明明怎样捉才能使得被兔子吃最少的胡萝卜。计算出被兔子吃最少胡萝卜的个数。例如:N=2, E1=4,E2=5;明明第1个捉第2个兔子(这个兔子已经吃了5根胡萝卜),第2个捉第1个兔子(这个兔子已经吃了8根胡萝卜),共被兔子吃了13根兔子。
输入格式
第一行: 1 个正整数 N。N的范围[1…100]
第二行 N 个正整数: 表示 N 只兔子每分钟可以吃的胡萝卜数,每个数的范围[1…1000000]。
输出格式
一个整数,表示最少要被吃掉多少胡萝卜。
输入/输出例子1
输入:
3
2 1 3
输出:
10
#include<bits/stdc++.h>
using namespace std;
bool f(int a,int b){
return a>b;
}
long long n,a[100005],h=0,t=0,s=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n,f);
for(int i=1;i<=n;i++){
t++;
s=s+a[i]*t;
}
cout<<s;
return 0;
}
第11题 兔子 时限:5s 空间:256m
从左往右有100000001个整数点,分别是整数点0至整数点100000000。
有n只兔子,第i只兔子在整数点d[i]。你需要选择一个整数点作为喂食点,所有兔子都要走到这个整数点进食。
应该如何选择喂食点,才能使得所有兔子走过的总路程最小?
输出最小的总路程。
输入格式
第一行,一个整数。1<=n<=20。
第二行,共n个整数,第i个整数是d[i]。0<=d[i]<=100000000。
【提示】
对于60%的数据, 1<=n<=3且0<=d[i]<=10。
对于80%的数据, 1<=n<=10且0<=d[i]<=100。
输出格式
一个整数
输入/输出例子1
输入:
3
5 9 1
输出:
8
#include<bits/stdc++.h>
using namespace std;
int n,j,a[100005],s;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
if(n%2==0){
j=n/2;
}
else{
j=n/2+1;
}
for(int i=1;i<=n;i++){
s=s+abs(a[i]-a[j]);
}
cout<<s;
return 0;
}
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 数组排序基础(C++)
发表评论 取消回复