蓝桥杯2023年本科决赛 C语言

发布 2021-12-28 01:12:28 阅读 1539

2023年决赛 c 本科。

一、四方定理。

数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示。

我们可以通过计算机验证其在有限范围的正确性。

对于大数,简单的循环嵌套是不适宜的。下面的**给出了一种分解方案。

请仔细阅读,填写空缺的**(下划线部分)。

int f(int n, int a,int idx)

ifreturn 1; /填空1

if(idx==4) return 0;

for(int i=(int)sqrt(n); i>=1; i--)

return 0;

int main(int argc, char* ar**)

for(;;

int r = f(number, a, 0);

printf("%d: %d %d %d %d", r, a[0], a[1], a[2], a[3]);

return 0;

二、加密。在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。

解密的方法就是再执行一次同样的操作。

加密过程中n位二进制数会循环使用。并且其长度也可能不是8的整数倍。

下面的**演示了如何实现该功能。

请仔细阅读,填写空缺的**(下划线部分)。

void f(char* buf, unsigned char* uckey, int n)

int i;

for(i=0; i buf[i] =buf[i] ^uckey[i];

int main(int argc, char* ar**)

char p abcd中国人123"; 待加密串。

char* key = 11001100010001110"; 以串的形式表达的密匙,运算时要转换为按位存储的形式。

int np = strlen(p);

int nk = strlen(key);

unsigned char* uckey = unsigned char*)malloc(np);

// 密匙串需要按位的形式循环拼入 uckey中。

int i;

for(i=0; i

f(p, uckey, strlen(p));

f(p, uckey, strlen(p));

printf("%s", p);

free(uckey);

return 0;

三、公倍数。

为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致。

但也并非纯粹的偶然:60是个优秀的数字,它的因子比较多。

事实上,它是1至6的每个数字的倍数。即1,2,3,4,5,6都是可以除尽60。

我们希望寻找到能除尽1至n的的每个数字的最小整数。

不要小看这个数字,它可能十分大,比如n=100, 则该数为:

请编写程序,实现对用户输入的 n (n<100)求出1~n的最小公倍数。

例如:用户输入:

程序输出:

用户输入:程序输出:

四、地铁换乘。

为解决交通难题,某城市修建了若干条交错的地铁线路,线路名及其所属站名如图一所示。

其中第一行数据为地铁线名,接下来是该线的站名。

当遇到空行时,本线路站名结束。

下一行开始又是一条新线。直到数据结束。

如果多条线拥有同一个站名,表明:这些线间可以在该站换车。

为引导旅客合理利用线路资源,解决交通瓶颈问题,该城市制定了票价策略:

1. 每条线路可以单独购票,票价不等。

2. 允许购买某些两条可换乘的线路的联票。联票**低于分别购票。

单线票价和联合票价如图二所示。

每行数据表示一种票价。

线名与票价间用空格分开。如果是联票,线名间用逗号分开。

联票只能包含两条可换乘的线路。

现在的问题是:根据这些已知的数据,计算从a站到b站最小花费和可行的换乘方案。

比如,对于本题目给出的示例数据。

如果用户输入:

五棵松,奥体中心。

程序应该输出:

(线1,线10)-线8 = 565

如果用户输入:

五棵松,霍营。

程序应该输出:

线1-(线4,线13) =440

可以看出,用户输入的数据是:起始站,终到站,用逗号分开。

程序输出了购票方案,在括号中的表示联票,短横线(-)用来分开乘车次序。

等号后输出的是该方案的花费数值。

请编程解决上述问题。

注意:1. 我们测试您的程序时,所用数据与题目中的示例数据不同,但格式完全一样。

2. 当多个方案有相同的最小花费,输出任意一个方案即可。

五、连通问题。

bmp是常见的图像存储格式。

如果用来存黑白图像(颜色深度=1),则其信息比较容易读取。

与之相关的数据:

以下偏移均是从文件头开始)

偏移:10字节, 长度4字节: 图像数据真正开始的位置。

偏移:18字节, 长度4字节: 位图的宽度,单位是像素。

偏移:22字节, 长度4字节: 位图的高度,单位是像素。

从图像数据开始处,每个像素用1个二进制位表示。

从**的底行开始,一行一行向上存储。

windows规定图像文件中一个扫描行所占的字节数必须是4字节的倍数,不足的位均以 0 填充。例如,**宽度为45像素,实际上每行会占用。

8个字节。可以通过windows自带的画图工具生成和编辑二进制图像。

需要在“属性”中选择“黑白”,指定为二值图像。

可能需要通过查看 | 缩放 | 自定义。把图像变大比例一些,更易于操作。

图像的左下角为图像数据的开始位置。白色对应1,黑色对应0

我们可以定义:两个点距离如果小于2个像素,则认为这两个点连通。

也就是说:以一个点为中心的九宫格中,围绕它的8个点与它都是连通的。

如下图所示,左下角的点组成一个连通的群体;

而右上角的点都是孤立的。

程序的目标是:根据给定的黑白位图,分析出所有独立连通的群体,输出每个连通群体的面积。所谓面积,就是它含有的像素的个数。

输入数据固定存在中,如下图所示:

程序应该输出:

该输出表示:共有4个连通群体。

输出的连通体面积间的顺序可以随意。

蓝桥杯2023年本科预赛 C语言

2012年预赛 c c 本科。一 微生物增殖 假设有两种微生物 x 和 y,x出生后每隔3分钟 一次 数目加倍 y出生后每隔2分钟 一次 数目加倍 一个新出生的x,半分钟之后吃掉1个y,并且,从此开始,每隔1分钟吃1个y.现在已知有新出生的 x 10,y 89,求60分钟后y的数目。如果x 10,y...

2023年蓝桥杯 第2届 预赛本科C语言真题解析

void reverse str char buf,int n if n 2 return char tmp buf 0 buf 0 buf n 1 buf n 1 tmp 参 reverse str buf 1,n 2 将任意十进制正小数分别转换成2,3,4,5,6,7,8,9进制正小数,小数点后...

蓝桥杯2023年C语言真题

标题1 啤酒和饮料。啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。注意 答案是一个整数。请通过浏览器提交答案。不要书写任何多余的内容 例如 写了饮料的数量,添加说明文字等 标题2 切面条。一根高筋拉面,中间...