2020同济大学电子与信息工程学院计算机系夏令营机试题目

第一题:签到题(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++中显示的时间,包含了键盘输入时间,可自行估算后扣除

这个题没看懂考的什么!

  • 19
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值