第一题:签到题(10分)
题目要求:
键盘依次输入 4 个字符串,分别是临时学号、姓名、报考类别和本科学校,按右对齐方式输出,要求其中最长的字符串输出时左边无空格,4 行的冒号对齐,冒号为半角字符,前后各一个空格
输入要求:
1、四个字符串均不含空格,长度不超过 40
2、不考虑输入错误
输出要求:
1、共四行,不要有多余的空行
2、每行最后无多余的空格或其它字符
输入示例1:
输出示例1:
输入示例2:
输出示例2:
源代码
#include<bits/stdc++.h>
using namespace std;
void OutputChar(int n){
for(int i = 0; i < n; i++)
cout << " ";
}
int main(){
string input[4], output[4] = {"临时学号", "姓名", "报考类别", "本科院校"};
int maxLen = 0;
for(int i = 0; i < 4; i++){
cin >> input[i];
if(input[i].size() > maxLen)
maxLen = input[i].size();
}
for(int i = 0; i < 4; i++){
OutputChar(maxLen - input[i].size());
cout << input[i] << " : " << output[i];
if(i < 3)
cout << endl;
}
return 0;
}
第 2 题:递归(20 分)
题目要求:
1、键盘输入 2-9 间的数字,输出对应的数字三角形
2、采用递归方式完成,整个程序中不允许出现循环(for、while、do-while、if-goto 均不允许)
3、给出预置的 cpp 文件,其中 main 函数不允许改动
输入要求:
1、输入一个 2-9 间的整数
2、不考虑输入错误
输出要求:
1、若输入的数字是 n,则共输出 n 行
2、每个数字之间加一个空格,每行的最后一个 1 后面,既可以有空格,也可以无空格
示例输入输出1:
示例输入输出2:
预置的 b2.cpp(可将下面文本框中代码复制到 DevC++中):
#include <iostream>
using namespace std;
/* 本题限制要求:
1、用递归方式完成,不准用循环(while、do-while、for、if-goto 均不允许)
2、除 output 函数外,还允许定义其它函数
3、不允许改动 main 函数
*/
int main()
{
int k;
cout << "请输入 2-9 间的数字" << endl;
cin >> k; //不考虑输入错误
output(k);
return 0;
}
源代码:
#include <iostream>
using namespace std;
/* 本题限制要求:
1、用递归方式完成,不准用循环(while、do-while、for、if-goto 均不允许)
2、除 output 函数外,还允许定义其它函数
3、不允许改动 main 函数
*/
bool flag = true;
int n;
void outputLine(int k){
if(k < 1)
return;
cout << k << " ";
outputLine(k - 1);
}
void output(int k){
if(flag){//记录用户输入的数字
flag = false;
n = k;
}
if(k < 1)
return ;
output(k - 1);
outputLine(k);
if(k != n)//k不等于n,说明不是输出的最后一行,所以应该输出一个换行
cout <<endl;
}
int main()
{
int k;
cout << "请输入 2-9 间的数字" << endl;
cin >> k; //不考虑输入错误
output(k);
return 0;
}
第 3 题:文件处理(30 分)
题目要求:
用 main 函数带参数方式传入一个文件名,打开该文件,统计文件中出现的大写字母、小写字母、数字、空格及其它字符的个数,并输出五种类型字符的总数。
注:other 的计数方法,不允许取文件大小后减去其余四种,必须是判断该字符的值不属于前4 种后再归入 other 计数。
输入要求:
1、文件名以 main 函数带参数方式给出(不考虑文件名输入错误)
2、假设文件中字符均为基本 ASCII 码 (不含扩展 ACII 码/中文,不考虑字符集不同带来的统计差异)
3、文件大小不大于 1GB
4、DevC++的集成环境下调试时,菜单“运行”-“参数”中可设置 main 函数的参数
输出要求:
1、共六行,不要有多余的空行
2、每行最后无多余的空格或其它不可见字符
3、前五行的值之和应等于第六行,第六行的值应与该文件的文件属性中显示的字节大小一致
示例输入与输出:(假设 main 函数带的参数是 helloworld.cpp)
源代码
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char** argv) {
FILE* fp;
fp = fopen(argv[1], "r");
long long bc = 0, lc = 0, di = 0, sp = 0, other = 0;
while (true) {
char c = fgetc(fp);
if (c == -1)
break;
if (c >= 'A' && c <= 'Z')
bc++;
else if (c >= 'a' && c <= 'z')
lc++;
else if (c >= '0' && c <= '9')
di++;
else if (c == ' ')
sp++;
else if(c == '\n')//换行在win中占两个字节,即回车换行
other += 2;
else
other++;
}
cout << "upper : " << bc << endl;
cout << "lower : " << lc << endl;
cout << "digit : " << di << endl;
cout << "space : " << sp << endl;
cout << "other : " << other << endl;
cout << "total : " << bc + lc + di + sp + other;
return 0;
}
注:我的这个代码的运行结果和题目中给出的示例输入输出不一样,我没有找出问题在哪,还希望知道的大佬不吝赐教。
第 4 题:算法(40 分)
炸飞机游戏摆放规则描述:
1、在 m 行*n 列的矩阵方格中随机摆放 k 架飞机,互相不得重叠、交叉
2、每架飞机的形状固定,占 9 格,其中翼展 5 格、尾翼 3 格、头尾 4 格
3、每架飞机的方向有四种
题目要求:
键盘依次输入行数 m,列数 n,飞机数 k,输出在 m 行*n 列的矩阵中摆放 k 架飞机的所有可能排列的总数(若出现轴对称、对角线对称,均重复计数即可)
输入数据要求:
1、依次输入 m/n/k 三个整数(4≤m≤11,4≤n≤11,1≤k≤min(m,n))
2、不考虑输入错误
输出数据要求:
1、仅一行,输出一个整数,表示排列总数
2、不要有多余的空行,整数后不要有多余的空格或其它字符
示例输入与输出:
时间要求:
1、键盘输入完成后,运行时间>15s 则认为不通过(正常 6 代以上低压笔记本,运行时间不超过 3s)
2、DevC++中显示的时间,包含了键盘输入时间,可自行估算后扣除
这个题没看懂考的什么!