遥控飞机争夺赛
题目描述
遥控飞机大赛拉开帷幕。比赛规则为,每位选手让自己的飞机从起点到终点飞行5次,组委会记录5次的飞行的成绩之后去掉一个最大成绩、一个最小成绩后计算剩余3个成绩的平值(平均分保留3位小数)作为该选手的最终成绩。
有n名选手参加了比赛,从键盘读入每位选手的编号以及他们的5次飞行的成绩。
请根据n名选手的比赛成绩,编程计算出冠军、亚军、季军的编号以及组委会计算出的成绩。(假设不存在多名选手成绩正好一样
输入
第一行为一个整数n,代表参加比赛的选手数量(n>=4 && n<=100)后面的n行,每行有6个数,第一个数是选手的编号,后5个数为选手的5次飞行的成绩
输出
3行,第一行输出冠军的编号及飞行成绩(保留3位小数)用空格隔开2个数;第二行输出亚军的编号及飞行成绩,第三行输出季军的编号及飞行成绩
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a[100][100] = {0};
int n;
cin>>n;
for(int i = 0;i<n;i++)
{
cin>>a[i][0];
a[i][6] = -1;
a[i][7] = 99999999;
a[i][8] = 0;
for(int j = 1;i<=5;j++)
{
cin>>a[i][j];
if(a[i][6]<a[i][j])
{
a[i][6] = a[i][j];
}
if(a[i][7]>a[i][j])
{
a[i][7] = a[i][j];
}
a[i][8] = a[i][8] + a[i][j];
}
a[i][8] = a[i][8] - a[i][6] - a[i][7];
}
for(int i = 0;i<n-1;i++)
{
for(int j = 0;j<n-1;j++)
{
if(a[j][8]<a[j+1][8])
{
for(int k = 0;k<=8;k++)
{
int tmp = a[i][k];
a[i][k] = a[j+1][k];
a[j+1][k] = tmp;
}
}
}
}
for(int i = 0;i<3;i++)
{
cout<<a[i][0]<<" "<<a[i][8]/3.0<<endl;
}
return 0;
}
出书最多的人
题目描述
假定图书馆新进了m(10 ≤ m ≤ 999)本图书,它们都是由n(1≤ n ≤ 26)个作者独立或相互合作编著的。
假设m 本图书编号为整数(1 到999),作者的姓名为字母('A' 到'Z'),请根据图书作者列表找出参与编著图书最多的作者和他的图书列表。
输入格式
第一行为所进图书数量m,其
余m 行,每行是一本图书的信息,其中第一个整数为图书编号,接着一个空格之后是一个由大写英文字母组成的没有重复字符的字符串,每个字母代表一个作者。
输入数据保证仅有一个作者出书最多。
输出格式
输出有多行:
第一行为出书最多的作者字母;
第二行为作者出书的数量;其余各行为作者参与编著的图书编号(按输入顺序输出)。
#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
int a[1100];
char b[1100][30]={'\0'};
int cnt[100]={0};
int n;
cin>>n;
for(int i = 0;i<n;i++)
{
cin>>a[i]>>b[i];
}
for(int i = 0;i<n;i++)
{
for(int j = 0;j<strlen(b[i]);j++)
{
cnt[b[i][j]]++;
}
}
char ma = 'A';
int mai = -1;
for(int i = 65;i<=90;i++)
{
if(cnt[i]>mai)
{
mai = cnt[i];
ma = (char)i;
}
}
cout<<ma<<endl;
cout<<mai<<endl;
for(int i = 0;i<n;i++)
{
for(int j = 0;j<strlen(b[i]);j++)
{
if(b[i][j] == ma)
{
cout<<a[i]<<endl;
break;
}
}
}
return 0;
}
病人排队
题目描述
病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:
1.老年人(年龄>= 60岁)比非老年人优先看病。
2. 老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
3.非老年人按登记的先后顺序看病。
输入
第1行,输入一个小于100的正整数,表示病人的个数;
后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于10的字符串表示病人的ID(每个病人的ID各不相同且只含数字和字母),一个整数表示病人的年龄,中间用单个空格隔开。
输出
按排好的看病顺序输出病人的ID,每行一个。
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a[100][100] = {0};
int n;
cin>>n;
for(int i = 0;i<n;i++)
{
cin>>a[i][0];
a[i][6] = -1;
a[i][7] = 99999999;
a[i][8] = 0;
for(int j = 1;i<=5;j++)
{
cin>>a[i][j];
if(a[i][6]<a[i][j])
{
a[i][6] = a[i][j];
}
if(a[i][7]>a[i][j])
{
a[i][7] = a[i][j];
}
a[i][8] = a[i][8] + a[i][j];
}
a[i][8] = a[i][8] - a[i][6] - a[i][7];
}
for(int i = 0;i<n-1;i++)
{
for(int j = 0;j<n-1;j++)
{
if(a[j][2]<a[j+1][2])
{
for(int k = 0;k<=2;k++)
{
int tmp = a[i][k];
a[i][k] = a[j+1][k];
a[j+1][k] = tmp;
}
}
}
}
for(int i = 0;i<3;i++)
{
cout<<a[i][0]<<" "<<a[i][8]/3.0<<endl;
}
return 0;
}
等比例缩放照片
题目描述
如图所示的一张照片(图①),可以把它的宽度或者高度减小从而减少照片的尺寸(如图②、③、④)。但只有等比例缩放的情况下照片才是最好看的,如图④;图②照片被压扁,图③照片被拉长。
给定图片的原始尺寸以及n组要压缩的尺寸,请问哪组压缩后的数据的宽高比最接近原始数据?如果有多组压缩尺寸的宽高比都是一样的且都是最接近原始数据的,那么输出压缩后面积最小的那组数据。
输入
第1行,2个整数x和y,代表图片的原始尺寸的宽和高
第2行,一个整数n,代表接下来有n组压缩后的尺寸(n<=100)
接下来n行,每行2个数,代表n组压缩后的宽和高(确保输入的宽>= 高)(本题所有照片的宽高均在1~10000之间)
输出
宽高比和原始图片最接近的宽高数据,如果有多组这样的数,输出面积最小的那组(不存在多组宽高比和原始数据一样接近且面积又一样的数据)
#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
int a[1100];
char b[1100][30]={'\0'};
int cnt[100]={0};
int n;
cin>>n;
for(int i = 0;i<n;i++)
{
cin>>a[i]>>b[i];
}
for(int i = 0;i<n;i++)
{
for(int j = 0;j<strlen(b[i]);j++)
{
cnt[b[i][j]]++;
}
}
char ma = 'A';
int mai = -1;
for(int i = 65;i<=90;i++)
{
if(cnt[i]>mai)
{
mai = cnt[i];
ma = (char)i;
}
}
cout<<ma<<endl;
cout<<mai<<endl;
for(int i = 0;i<n;i++)
{
for(int j = 0;j<strlen(b[i]);j++)
{
if(b[i][j] == ma)
{
cout<<a[i]<<endl;
break;
}
}
}
return 0;
}