/*
*时间:2018年4月3日08:30:11-2018年4月3日09:04:28
*题号:1041. 考试座位号
*语言:C++ (g++ 4.7.2)
*分数:15
*题目描述:
每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入
场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试
座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的
考试座位号码。
输入格式:
输入第一行给出一个正整数N(<=1000),随后N行,每行给出一个考生的信息:“准考证号 试机座位号 考试座位号”。其中准考证号由14位数字组成,座位从1到N编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。
考生信息之后,给出一个正整数M(<=N),随后一行中给出M个待查询的试机座位号码,以空格分隔。
输出格式:
对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用1个空格分隔。
输入样例:
4
10120150912233 2 4
10120150912119 4 1
10120150912126 1 3
10120150912002 3 2
2
3 4
输出样例:
10120150912002 2
10120150912119 1
*/
#include <iostream>
using namespace std;
int main()
{
int N;
cin>>N;
struct student
{
long long ID;
int S;
int K;
}num[N];
//student* num[N];
int i;
for (i=0; i<N; i++)
{
cin>>num[i].ID;
cin>>num[i].S;
cin>>num[i].K;
}
int M;
cin>>M;
int choucha[M]; //抽查的试机位置号
for (i=0; i<M; i++)
{
cin>>choucha[i];
}
int j;
for (j=0; j<M; j++)
{
for (i=0; i<N; i++)
if (num[i].S == choucha[j])
cout<<num[i].ID<<" "<<num[i].K<<endl;
}
return 0;
}
/*
*时间:2018年4月3日12:42:46-2018年4月3日12:59:06
*题号:1004. 成绩排名
*语言:C++ (g++ 4.7.2)
*分数:20
*题目描述:
读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式:每个测试输入包含1个测试用例,格式为
第1行:正整数n
第2行:第1个学生的姓名 学号 成绩
第3行:第2个学生的姓名 学号 成绩
... ... ...
第n+1行:第n个学生的姓名 学号 成绩
其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有
两个学生的成绩是相同的。
输出格式:对每个测试用例输出2行,第1行是成绩最高学生的姓名和学号,第2行是成绩最低学生的姓名和学号,
字符串间有1空格。
输入样例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
输出样例:
Mike CS991301
Joe Math990112
*/
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int n;
cin>>n;
int maxScore = 0;
int minScore = 100;
int numMinSocre = 0;
int numMaxSocre = 0;
struct student //结构体快速初始化方法
{
string name;
string project;
int score;
}stu[n];
for (int i=0; i<n; i++)
{
cin>>stu[i].name>>stu[i].project>>stu[i].score;
}
for (int i=0; i<n; i++)
{
if (stu[i].score > maxScore)
{
maxScore = stu[i].score;
numMaxSocre = i;
}
if (stu[i].score < minScore)
{
minScore = stu[i].score;
numMinSocre = i;
}
}
cout<<stu[numMaxSocre].name<<" "<<stu[numMaxSocre].project<<endl;
cout<<stu[numMinSocre].name<<" "<<stu[numMinSocre].project<<endl;
return 0;
}
/*
*时间:2018年4月3日15:00:46-2018年4月3日15:58:13
*题号:1028. 人口普查
*语言:C++ (g++ 4.7.2)
*分数:20
*题目描述:
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。
这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是
2014年9月6日,所以超过200岁的生日和未出生的生日都是不合理的,应该被过滤掉。
输入格式:
输入在第一行给出正整数N,取值在(0, 105];随后N行,每行给出1个人的姓名(由不超过5个英文字母组成的
字符串)、以及按“yyyy/mm/dd”(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。
输出格式:
在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。
输入样例:
5
John 2001/05/12
Tom 1814/09/06
Ann 2121/01/30
James 1814/09/05
Steve 1967/11/20
输出样例:
3 Tom John
*/
#include <iostream>
#include <string>
using namespace std;
struct population
{
string name;
string birthday;
float ageDays;
};
//将输入的string类型的年月日转化为float类型的存活的天数
float agedaysStr2Float (struct population ppl)
{
int year = (ppl.birthday[0] - '0')*1000 + (ppl.birthday[1] - '0')*100 + (ppl.birthday[2] - '0')*10 + (ppl.birthday[3] - '0')*1;
int mon = ((ppl.birthday[5] - '0')*10) + (ppl.birthday[6] - '0')*1;
int day = (ppl.birthday[8] - '0')*10 + (ppl.birthday[9] - '0')*1;
return ((2014 - year)*365 + (9 - mon)*30 + 6 - day + 1); //生下来就算一天,所以+1
}
int main()
{
int n;
cin>>n;
struct population ppl[n]; //定义结构体数组,也可用指针的形式
for (int i=0; i<n; i++)
{
cin>>ppl[i].name>>ppl[i].birthday;
}
for (int i=0; i<n; i++)
{
ppl[i].ageDays = agedaysStr2Float(ppl[i]);
//cout<<ppl[i].ageDays<<endl;
}
float minAge = 200*365 + 1;
int flagMinAge = 0;
float maxAge = 0;
int flagMaxAge = 0;
int pplCount = 0;
for (int i=0; i<n; i++)
{
if (!(0<ppl[i].ageDays && ppl[i].ageDays <= 200*365 + 1)) //年龄天数要大于0小于73001
continue;
//cout<<ppl[i].ageDays<<endl;
if (ppl[i].ageDays > maxAge)
{
maxAge = ppl[i].ageDays;
flagMaxAge = i;
}
if (ppl[i].ageDays < minAge)
{
minAge = ppl[i].ageDays;
flagMinAge = i;
}
pplCount++;
}
if (pplCount == 0) cout<<"0"<<endl; //全镇都是死人或者没出生的情况,输出0就跳过,坑爹啊谁会想没有一个活人
else cout<<pplCount<<" "<<ppl[flagMaxAge].name<<" "<<ppl[flagMinAge].name<<endl;
return 0;
}
/*
*时间:2018年4月3日15:58:54-2018年4月3日16:27:53
*题号:1032. 挖掘机技术哪家强
*语言:C++ (g++ 4.7.2)
*分数:20
*题目描述:
为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强
的那个学校。
输入格式:
输入在第1行给出不超过105的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代
表的学校的编号(从1开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。
输出格式:
在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。
输入样例:
6
3 65
2 80
1 100
2 70
3 40
3 0
输出样例:
2 150
*/
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
struct participant
{
int school;
int score;
}pat[n];
int scoreSchool[n+1] = {0};
for (int i=0; i<n; i++)
{
cin>>pat[i].school>>pat[i].score;
}
for (int i=0; i<n; i++)
{
scoreSchool[pat[i].school] += pat[i].score;
}
int maxSchoolNum = 0;
int maxSchoolSocre = 0;
for (int i=1; i<=n; i++) //学校编号是1-n,不能用i<n,会漏掉第n个学校
{
if (scoreSchool[i] > maxSchoolSocre)
{
maxSchoolSocre = scoreSchool[i];
maxSchoolNum = i;
}
}
cout<<maxSchoolNum<<" "<<maxSchoolSocre<<endl;
return 0;
}
/*
*时间:2018年4月3日16:38:08-2018年4月3日17:00:01
*题号:1036. 跟奥巴马一起编程
*语言:C++ (g++ 4.7.2)
*分数:15
*题目描述:
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的
总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个
正方形。现在你也跟他一起画吧!
输入格式:
输入在一行中给出正方形边长N(3<=N<=20)和组成正方形边的某种字符C,间隔一个空格。
输出格式:
输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出
的行数实际上是列数的50%(四舍五入取整)。
输入样例:
10 a
输出样例:
aaaaaaaaaa
a a
a a
a a
aaaaaaaaaa
*/
#include<iostream>
using namespace std;
int main(void)
{
int n;
cin>>n;
char C;
cin>>C;
int lines;
if (n % 2 == 1) lines = n/2 + 1;
else lines = n / 2;
//cout<<lines<<endl;
for (int i=1; i<=lines; i++)
{
if (i == 1)
{
for (int j=0; j<n; j++)
cout<<C;
cout<<endl;
}
else if (i == lines)
{
for (int j=0; j<n; j++)
cout<<C;
}
else
{
cout<<C;
for (int j=1; j<n-1; j++)
cout<<" ";
cout<<C;
cout<<endl;
}
}
return 0;
}
/*
*时间:2018年4月3日19:02:41-2018年4月3日20:01:18
*题号:1027. 打印沙漏
*语言:C++ (g++ 4.7.2)
*分数:20
*题目描述:
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
*****
***
*
***
*****
2
*/
#include <iostream>
using namespace std;
int main()
{
int n;
char C;
cin>>n>>C;
int line = 0;
//设一个三角形的行数为n,则总共用掉的符号为2n*2-1个,最多为1000个,则三角形的行数小于23
for (int i=1; i<25; i++)
{
if (n >= 2*i*i-1 && n < 2*(i+1)*(i+1)-1) //用2i^2-1<=n<2(i+1)^2-1来计算整数line,也可用向下取整的sqrt
{
line = i;
break;
}
}
//cout<<line<<endl;
int res = (line == 0)? 0: (n - 2*line*line + 1); //行数为0时,剩下的输出的应该是0(后面式子不适用行数为0),不为0时输出的是n- 2line^2 +1
if (line == 1) //行数为1时输出的输出单个符号,下面是用于行数为2及以上
{
cout<<C<<endl;
}
else
{
for (int i=line; i > 0; i--)
{
for(int j=0; j<line-i; j++)
{
cout<<" ";
}
for(int j=2*i-1; j>=1; j--)
{
cout<<C;
}
//for(int j=0; j<line-i; j++) 不用打印右边的括号!!自己想复杂了,检查了半小时
//{
// cout<<" ";
//}
cout<<endl;
}
for (int i=2; i <=line; i++)
{
for(int j=0; j<line-i; j++)
{
cout<<" ";
}
for(int j=2*i-1; j>=1; j--)
{
cout<<C;
}
//for(int j=0; j<line-i; j++)
//{
// cout<<" ";
//}
cout<<endl;
}
}
cout<<res<<endl;
return 0;
}
【PAT】1041/1004/1028/1032/1036/1027
最新推荐文章于 2023-02-17 21:08:43 发布