c++试题Word文件下载.docx
《c++试题Word文件下载.docx》由会员分享,可在线阅读,更多相关《c++试题Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
直接写在题面中不能得分。
intf(intn,inta[],intidx)
{
if(______________)return1;
//填空1
if(idx==4)return0;
for(inti=(int)sqrt(n);
i>
=1;
i--)
{
a[idx]=i;
if(_______________________)return1;
//填空2
}
return0;
}
intmain(intargc,char*argv[])
for(;
;
)
intnumber;
printf("
输入整数(1~10亿):
"
);
scanf("
%d"
&
number);
inta[]={0,0,0,0};
intr=f(number,a,0);
%d:
%d%d%d%d\n"
r,a[0],a[1],a[2],a[3]);
2.代码填空(满分14分)
在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。
解密的方法就是再执行一次同样的操作。
加密过程中n位二进制数会循环使用。
并且其长度也可能不是8的整数倍。
下面的代码演示了如何实现该功能。
voidf(char*buf,unsignedchar*uckey,intn)
inti;
for(i=0;
i<
n;
i++)
buf[i]=buf[i]^uckey[i];
charp[]="
abcd中国人123"
//待加密串
char*key="
11001100010001110"
//以串的形式表达的密匙,运算时要转换为按位存储的形式。
intnp=strlen(p);
intnk=strlen(key);
unsignedchar*uckey=(unsignedchar*)malloc(np);
//密匙串需要按位的形式循环拼入uckey中
np*8;
if(key[i%nk]=='
1'
____________________________________________;
else
f(p,uckey,strlen(p));
printf("
%s\n"
p);
free(uckey);
3.程序设计(满分19分)
为什么1小时有60分钟,而不是100分钟呢?
这是历史上的习惯导致。
但也并非纯粹的偶然:
60是个优秀的数字,它的因子比较多。
事实上,它是1至6的每个数字的倍数。
即1,2,3,4,5,6都是可以除尽60。
我们希望寻找到能除尽1至n的的每个数字的最小整数。
不要小看这个数字,它可能十分大,比如n=100,则该数为:
69720375229712477164533808935312303556800
请编写程序,实现对用户输入的n(n<
100)求出1~n的最小公倍数。
例如:
用户输入:
6
程序输出:
60
10
2520
要求考生把所有函数写在一个文件中。
4.程序设计(满分28分)
为解决交通难题,某城市修建了若干条交错的地铁线路,线路名及其所属站名如stations.txt所示。
线1
苹果园
....
四惠东
线2
西直门
车公庄
建国门
线4
其中第一行数据为地铁线名,接下来是该线的站名。
当遇到空行时,本线路站名结束。
下一行开始又是一条新线....直到数据结束。
如果多条线拥有同一个站名,表明:
这些线间可以在该站换车。
为引导旅客合理利用线路资源,解决交通瓶颈问题,该城市制定了票价策略:
1.每条线路可以单独购票,票价不等。
2.允许购买某些两条可换乘的线路的联票。
联票价格低于分别购票。
单线票价和联合票价如price.txt所示。
线1180
.....
线13114
线1,线2350
线1,线10390
每行数据表示一种票价
线名与票价间用空格分开。
如果是联票,线名间用逗号分开。
联票只能包含两条可换乘的线路。
现在的问题是:
根据这些已知的数据,计算从A站到B站最小花费和可行的换乘方案。
比如,对于本题目给出的示例数据
如果用户输入:
五棵松,奥体中心
程序应该输出:
-(线1,线10)-线8=565
五棵松,霍营
-线1-(线4,线13)=440
可以看出,用户输入的数据是:
起始站,终到站,用逗号分开。
程序输出了购票方案,在括号中的表示联票,短横线(-)用来分开乘车次序。
等号后输出的是该方案的花费数值。
请编程解决上述问题。
1.我们测试您的程序时,所用数据与题目中的示例数据不同,但格式完全一样。
2.当多个方案有相同的最小花费,输出任意一个方案即可。
古城路
八角游乐园
八宝山
玉泉路
五棵松
万寿路
公主坟
军事博物馆
木樨地
南礼士路
复兴门
西单
天安门西
天安门东
王府井
东单
永安里
国贸
大望路
四惠
阜成门
长椿街
宣武门
和平门
前门
崇文门
北京站
朝阳门
东四十条
东直门
雍和宫
安定门
鼓楼大街
积水潭
公益西桥
角门西
马家堡
北京南站
陶然亭
菜市口
灵境胡同
西四
平安里
新街口
动物园
国家图书馆
魏公村
人民大学
海淀黄庄
中关村
北京大学东门
圆明园
西苑
北宫门
安河桥北
线5
天通苑北
天通苑
天通苑南
立水桥
立水桥南
北苑路北
大屯路东
惠新西街北口
惠新西街南口
和平西桥
和平里北街
北新桥
张自忠路
东四
灯市口
磁器口
天坛东门
蒲黄榆
刘家窑
宋家庄
线8
森林公园南门
奥林匹克公园
奥体中心
北土城
线10
巴沟
苏州街
知春里
知春路
西土城
牡丹园
健德门
安贞门
芍药居
太阳宫
三元桥
亮马桥
农业展览馆
团结湖
呼家楼
金台夕照
双井
劲松
线13
大钟寺
五道口
上地
西二旗
龙泽
回龙观
霍营
北苑
望京西
光熙门
柳芳
线2250
线4160
线5270
线8175
线10226
线1,线5410
线1,线4330
线10,线13310
线2,线5390
线4,线10370
线4,线13260
5.程序设计(满分30分)
BMP是常见的图像存储格式。
如果用来存黑白图像(颜色深度=1),则其信息比较容易读取。
与之相关的数据:
(以下偏移均是从文件头开始)
偏移:
10字节,长度4字节:
图像数据真正开始的位置。
18字节,长度4字节:
位图的宽度,单位是像素。
22字节,长度4字节:
位图的高度,单位是像素。
从图像数据开始处,每个像素用1个二进制位表示。
从图片的底行开始,一行一行向上存储。
Windows规定图像文件中一个扫描行所占的字节数必须是4字节的倍数,
不足的位均以0填充。
例如,图片宽度为45像素,实际上每行会占用
8个字节。
可以通过Windows自带的画图工具生成和编辑二进制图像。
需要在“属性”中选择“黑白”,指定为二值图像。
可能需要通过查看|缩放|自定义...把图像变大比例一些,
更易于操作。
图像的左下角为图像数据的开始位置。
白色对应1,黑色对应0
我们可以定义:
两个点距离如果小于2个像素,则认为这两个点连通。
也就是说:
以一个点为中心的九宫格中,围绕它的8个点与它都是连通的。
如:
t1.bmp所示,左下角的点组成一个连通的群体;
而右上角的点都是孤立的。
程序的目标是:
根据给定的黑白位图,分析出所有独立连通的群体,
输出每个连通群体的面积。
所谓面积,就是它含有的像素的个数。
输入数据固定存在in.bmp中。
如示例的in.bmp,
12
81
52
133
该输出表示:
共有4个连通群体。
输出的连通体面积间的顺序可以随意。
我们测试程序的时候,会使用不同的in.bmp文件。