杭电 2010 年计算机复试真题

写在前面

此题目是根据 CSDN 博客粥粥同学发布的内容进行收集整理,记录了本人的解题过程和一些想法。仅供大家参考,如有错误,欢迎大家指出!


第一题

Problem Description

计算机随机产生一个 3 位的正整数,进行猜数字

Input

每个输入数字占一行,输入你认为正确的数字

Output

如果猜小了,输出:“猜小了,请继续”。如果猜大了,输出:“猜大了,请继续”。如果猜对了。输出:“恭喜你,猜对了”。最多只能猜 10 次,如果猜了 10 次还没有猜对,就退出程序,输出:“Bye Bye”。

Sample Input

50
90
80
81

Sample Output

猜小了,请继续
猜大了,请继续
猜小了,请继续
恭喜你,猜对了

解题思路

题目很简单,关键在于生成三位数字

参考源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <ctime>
#include <iostream>
using namespace std;
int main() {
int num, r, count = 0;
srand(time(NULL)); //根据时间来确定随机种子
r = (rand() % (999 - 100 + 1)) + 100; // 100-999
while (cin >> num) {
if (count > 10) {
cout << "Bye Bye" << endl;
break;
}
count++;
if (num == r) {
cout << "恭喜你,猜对了" << endl;
break;
} else if (num > r)
cout << "猜大了,请继续" << endl;
else
cout << "猜小了,请继续" << endl;
}
return 0;
}

第二题

Problem Description

字符串求和,输入一个字符串,把字符串中的数字作为整数进行求和,并输出结果

Input

输入数据有多组,每组占一行

Output

输出字符串中的数字之和,每组输出占一行

Sample Input

There are some apple
123 and 456

Sample Output

0
579

解题思路

简单题,遍历字符串,若是数字相加即可

参考源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <cstring>
#include <iostream>
using namespace std;
int main() {
int sum;
string s;
while (getline(cin, s)) {
sum = 0;
for (int i = 0; i < s.length(); i++) {
if (isdigit(s[i])) sum += (s[i] - '0');
}
cout << sum << endl;
}
return 0;
}

第三题

Problem Description

处理一个文件 student.txt,文件当中包括一组学生的信息,
包括名字、学号、英语成绩、语文成绩、数学成绩、科学成绩,如下:
姓名 学号 英语 语文 数学 科学
张三 20100601 78 89 62 75
李四 20100602 78 54 98 86
王五 20100603 78 69 85 75
从这个文件当中读入学生的信息,然后按照总成绩从高到低进行排序并输出学生信息

Input

输入文件 student.txt

Output

总成绩从高到低进行排序并输出学生信息

Sample Input

此为文件内容:
张三 20100601 78 89 62 75
李四 20100602 78 54 98 86
王五 20100603 78 69 85 75

Sample Output

1.李四 20100602
2.王五 20100603
3.张三 20100601

解题思路

文件处理题,需要使用 fstream,另外注意表头的处理

参考源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <algorithm>
#include <cstring>
#include <fstream>
#include <iostream>
using namespace std;
struct student {
char name[20], id[20];
int a, b, c, d;
} stu[1000];
bool cmp(student m, student n) { return m.a + m.b + m.c + m.d > n.a + n.b + n.c + n.d; }
int main() {
int n = 0;
ifstream in;
in.open("..\\HDU2010test\\student.txt", ios::in);
if (!in.is_open()) cout << "error" << endl;
while (!in.eof()) {
if (n == 0) { //处理第一行表头
string s;
getline(in, s);
} else {
in >> stu[n].name >> stu[n].id;
in >> stu[n].a >> stu[n].b >> stu[n].c >> stu[n].d;
}
n++;
}
in.close(); //文件关闭
sort(stu, stu + n, cmp);
for (int i = 0; i < n - 1; i++) {
cout << i + 1 << "." << stu[i].name << " " << stu[i].id << endl;
}
return 0;
}

相关内容