7-1 宿舍谁最高?
学校选拔篮球队员,每间宿舍最多有 4 个人。现给出宿舍列表,请找出每个宿舍最高的同学。定义一个学生类 Student,有身高 height,体重 weight 等。
输入格式:
首先输入一个整型数 n (1≤n≤106),表示有 n 位同学。
紧跟着 n 行输入,每一行格式为:宿舍号 name height weight
。宿舍号
的区间为 [0, 999999], name
由字母组成,长度小于 16,height
,weight
为正整数。
输出格式:
按宿舍号从小到大排序,输出每间宿舍身高最高的同学信息。题目保证每间宿舍只有一位身高最高的同学。
注意宿舍号不足 6 位的,要按 6 位补齐前导 0。
输入样例:
7
000000 Tom 175 120
000001 Jack 180 130
000001 Hale 160 140
000000 Marry 160 120
000000 Jerry 165 110
000003 ETAF 183 145
000001 Mickey 170 115
输出样例:
000000 Tom 175 120
000001 Jack 180 130
000003 ETAF 183 145
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct stu
{
int room;
char name[16];
int h,w;
}a[1000000] = {0},temp;
int main()
{
int n,i,k = 0;
int d[1000];
cin>>n;
for(i = 0;i < n;i++)
{
cin>>temp.room>>temp.name>>temp.h>>temp.w;
d[k++] = temp.room;
if(a[temp.room].h == 0)
{
a[temp.room] = temp;
}
else
{
if(temp.h>a[temp.room].h)
{
a[temp.room] = temp;
}
}
}
for(i = 0;i < k;i++)
{
if(a[d[i]].room !=-1)
{
printf("%06d %s %d %d\n",a[d[i]].room,a[d[i]].name,a[d[i]].h,a[d[i]].w);
a[d[i]].room = -1;
}
}
return 0;
}
7-2 类的定义和使用
定义一个日期类Date,内有数据成员year、month和day,分别代表年、月、日,并若干有成员函数:构造函数用于初始化数据成员,isLeap函数用于闰年的判断。编写主函数:创建日期对象,判断该年是否是闰年。
输入格式:
每组测试数据仅包含一个测试用例,每个测试用例占一行包括三个数,分别表示年、月、日。
输出格式:
如果是闰年则输出yes,不是则输出no。
输入样例:
2006 3 5
输出样例:
no
#include <iostream>
using namespace std;
class Date
{
private:
int year,month,day;
public:
Date(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
int isleap()
{
if(year%4==0 && year%100!=0||year%400==0)
return 1;
else
return 0;
}
};
int main()
{
int year,month,day;
cin>>year>>month>>day;
Date a(year,month,day);
if(a.isleap())
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
return 0;
}
7-3 立方体类
定义立方体类Box,数据成员有长宽高且都是整数,构造函数初始化数据成员,成员函数计算体积,主函数中输入长宽高,输出立方体体积。
输入格式:
输入立方体的长宽高,中间用空格分隔。
输出格式:
输出体积并换行。
输入样例:
在这里给出一组输入。例如:
1 2 3
输出样例:
在这里给出相应的输出。例如:
6
#include<iostream>
using namespace std;
class Box
{
public:
int l,w,h;
Box(int x,int y,int z): l(x),w(y),h(z){}
int V()
{
return l*w*h;
}
};
int main()
{
int x,y,z;
cin>>x>>y>>z;
Box a(x,y,z);
cout<<a.V()<<endl;
return 0;
}
7-4 类的定义和使用
请定义一个Point类,有两个数据成员:x和y, 分别代表x坐标和y坐标,并有若干构造函数和一个移动的成员函数,可输出移动后新的坐标值。
输入:
第一行的两个数 分别表示 点的x坐标和y坐标。 第二行的两个数 分别表示 x和y方向移动的距离。
输出:
移动后的点的x坐标和y坐标。
输入样例:
1 5
2 5
输出样例:
3 10
#include<iostream>
using namespace std;
class Point
{
public:
float x,y;
Point(float a,float b): x(a),y(b){}
void move(float dx,float dy)
{
x += dx;
y += dy;
}
void print()
{
cout<<x<<" "<<y<<endl;
}
};
int main()
{
float x,y,dx,dy;
cin>>x>>y>>dx>>dy;
Point p(x,y);
p.move(dx,dy);
p.print();
return 0;
}
7-5 2017final游泳池过道造价
有一个圆形游泳池,现在需要在其周围建一过道,并在其四周围上矩形栅栏,如图所示。若过道造价为20元/平方米。要求计算并输出过道的造价。请定义一个Circle类,内有私有数据成员radius表示半径,并有若干成员函数;定义一个Rectangle类,内有私有数据成员length、width表示长和宽,并有若干成员函数。(设圆周率PI = 3.14159,所有数据均为double类型)
输入格式:
输入一行数据a b c,分别表示游泳池半径、栅栏的长和宽。其中a>0,b>2*a,c>2*a。
输出格式:
对每一行的输入数据,输出过道的造价。
输入样例:
3 7 8
输出样例:
554.514
#include<iostream>
#define Pi 3.14159
using namespace std;
class Circle
{
private:
double radius;
public:
Circle(double a): radius(a){}
double getr()
{
return radius;
}
};
class Rectangle
{
private:
double l,w;
public:
Rectangle(double b,double c): l(b),w(c){}
double getl()
{
return l;
}
double getw()
{
return w;
}
};
int main()
{
double a,b,c;
cin>>a>>b>>c;
Circle cc(a);
Rectangle d(b,c);
double S = d.getl() * d.getw() - cc.getr() * cc.getr() * Pi;
cout<<S*20<<endl;
}
7-6 立方体类的实现
立方体类Box的实现,完成计算体积、计算表面积、输出结果等功能。其中给定的主函数为:
int main( ){
float ab;
cin>>ab;
Box obj;
obj.seta( ab );
obj.getvolume( );
obj.getarea( );
obj.disp( );
return 0;
}
输入格式:
立方体的边长,可以是float类型的数据。
输出格式:
立方体的体积和表面积,中间用一个空格隔开,末尾换行。
输入样例:
3
输出样例:
27 54
#include<iostream>
using namespace std;
class Box
{
private:
float a;
public:
void seta(float x)
{
a=x;
}
float getvolume()
{
return a*a*a;
}
float getarea( )
{
return 6*a*a;
}
void disp( )
{
cout<<a*a*a<<" "<<6*a*a<<endl;
}
};
int main( )
{
float ab;
cin>>ab;
Box obj;
obj.seta( ab );
obj.getvolume( );
obj.getarea( );
obj.disp( );
return 0;
}
7-7 该日是该年的第几天
定义一个日期类Date,内有数据成员年、月、日,另有成员函数:构造函数用于初始化数据成员,输出,闰年的判断。
编写主函数:创建日期对象,计算并输出该日是该年的第几天。 输入格式: 测试输入包含若干测试用例,每个测试用例占一行。当读入0 0 0时输入结束,相应的结果不要输出。
输入样例:
2006 3 5
2000 3 5
0 0 0
输出样例:(括号内为说明)
64 (2006年3月5日是该年的第64天)
65 (2000年3月5日是该年的第65天)
#include <iostream>
using namespace std;
int A[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int B[12]={31,28,31,30,31,30,31,31,30,31,30,31};
class Date
{
private:
int year,month,day;
public:
Date(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
void print()
{
if(year%4==0 && year%100!=0||year%400==0)
for(int i=0;i<month-1;i++)
{
day += A[i];
}
else
for(int i=0;i<month-1;i++)
{
day+=B[i];
}
cout<<day<<endl;
}
};
int main()
{
int year,month,day;
cin>>year>>month>>day;
while(year!=0 && month!=0 && day!=0)
{
Date a(year,month,day);
a.print();
cin>>year>>month>>day;
}
return 0;
}
7-8 2018final世界杯也疯狂之球队积分计算
这是一个世界杯赛场,有球队类,其中,队名、记录每场比分的数组、累计积分 是其三个私有数据成员;有两个成员函数,分别是根据各场比分计算累计积分、以及计算净胜球总和。请添加适当的构造函数。
积分计算规则是:胜者得三分,负者不得分,打平双方各得一分。
输入格式:
输入仅一行,表示这个球队信息,分别是 1或2(1表示该队是主队,2表示该队是客队)、若干场比分(主队进球数:客队进球数,场数小于20)。每项信息间以空格隔开。
输出格式:
输出一行,分别是该队的累计积分和净胜球数,两项信息间以空格隔开。
输入样例:
在这里给出一组输入。例如:
1 3:5 5:0 2:2 3:7
输出样例:
在这里给出相应的输出。例如:
4 -1
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int flag,score = 0,cnt = 0;
char a,b,x;
cin>>flag;
while(cin>>a>>x>>b)
{
if(flag == 1)
{
if(a > b)
{
score += 3;
cnt=cnt+(a-'0')-(b-'0');
}
else if(a == b)
score++;
else if(a < b)
cnt=cnt+(a-'0')-(b-'0');
}
if(flag == 2)
{
if(a < b)
{
score += 3;
cnt=cnt+(b-'0')-(a-'0');
}
else if(a == b)
score++;
else if(a > b)
cnt=cnt+(b-'0')-(a-'0');
}
}
cout<<score<<' '<<cnt<<endl;
return 0;
}
7-9 队列操作
请实现一个MyQueue类,实现出队,入队,求队列长度.
实现入队函数 void push(int x);
实现出队函数 int pop();
实现求队列长度函数 int size();
输入格式:
每个输入包含1个测试用例。每个测试用例第一行给出一个正整数 n (n <= 10^6) ,接下去n行每行一个数字,表示一种操作:
1 x : 表示从队尾插入x,0<=x<=2^31-1。
2 : 表示队首元素出队。
3 : 表示求队列长度。
输出格式:
对于操作2,若队列为空,则输出 “Invalid”,否则请输出队首元素。 对于操作3,请输出队列长度。
每个输出项最后换行。
输入样例:
5
3
2
1 100
3
2
输出样例:
0
Invalid
1
100
#include <iostream>
using namespace std;
class MyQueue
{
public:
int cnt;
int a[100000];
MyQueue()
{
cnt = 0;
a[100000] = 0;
}
void push(int x)
{
a[cnt++] = x;
}
int pop()
{
return a[--cnt];
}
int size()
{
return cnt;
}
};
int main()
{
MyQueue k;
int n,i;
cin>>n;
for(i = 0;i < n;i++)
{
int op;
cin>>op;
switch(op)
{
case 1:
int x;
cin>>x;
k.push(x);
break;
case 2:
if(k.size())
cout<<k.pop()<<endl;
else
cout<<"Invalid"<<endl;
break;
case 3:
cout<<k.size()<<endl;
}
}
return 0;
}
7-10 计算全班学生C++课程的总成绩和平均成绩
定义一个类Student,记录学生C++课程的成绩。要求使用静态数据成员或静态成员函数计算全班学生C++课程的总成绩和平均成绩。
输入格式:
输入5个不超过100的正整数,作为C++成绩。
输出格式:
在第一行中输出成绩的和,第二行输出平均成绩。
输入样例:
90 80 70 60 50
输出样例:
350
70
#include<iostream>
using namespace std;
class Student
{
public:
int grade;
static int sum;
public:
Student(int a)
{
sum=sum+a;
}
static void print()
{
cout<<sum<<endl<<sum/5;
}
};
int Student::sum = 0;
int main()
{
int score,i;
for(i = 0;i < 5;i++)
{
cin>>score;
Student s(score);
}
Student s(0);
s.print();
return 0;
}