2023年C语言本科组模拟题编程大题分析

发布 2023-04-20 22:48:28 阅读 1603

以下为2023年c语言本科组的模拟题的7~10题以及我自己写的部分程序,由于水平有限,程序中还有很多错误与不足,恳请大家指教。

7.**设计(满分5分)

625这个数字很特别,625的平方等于390625,刚好其末3位是625本身。除了625,还有其它的3位数有这个特征吗?

请编写程序,寻找所有这样的3位数:它的平方的末3位是这个数字本身。

输出结果中,从小到大,每个找到的数字占一行。比如那个625就输出为:

解题思路:对所有的三位数从小到大进行穷举,判断是否符合条件,若符合则输出。

实现方法:先求出当前三位数的平方,用平方数减去该三位数,再用平方数对1000求余,若余数为0则该三位数符合条件,将该三位数输出。

程序**:#include

using namespace std;

int main()

for(int i = 100; i <=999; +i)

return 0;运行结果:

9.**设计(满分18分)

整数的分划问题。

如,对于正整数n=6,可以分划为:

现在的问题是,对于给定的正整数n,编写算法打印所有划分。

用户从键盘输入n(范围1~10)

程序输出该整数得所有划分。

解题思路:从n到1进行循环,将n分解,分解得到的数中的最大的数是当前的循环变量,然后在分解得到的数中从后往前依次将大于1的数进行分解,为便于实现这一过程我们将分解完的数存放到链表中。

实现方法:将将要被分解的数存放到链表第一个结点的位置,然后将其分解,将分解得到的数再存入到链表中,然后在从后往前遍历分解得到的数,依次对大于1的数调用分解函数进行分解。每分解一次便输出一次。

程序**:#include

#define null 0

using namespace std;

typedef struct mynum

调用fun()函数对第一个数以后的数进行分解。

fun(head->next);

cout< }

return 0;

/将pot的x域中的数分解成最大值为i的n个数的和,并连接到链表中的原来位置。

nump s(nump pot,int i)

nump q,p,temp;

p = pot;

q = pot;

temp = p->next;

int a = p->x - i;

p->x = i;

while(a >=1)

else q->next = null;

p->next = q;

p = q;

q->next = temp;

return pot;

/使用该函数对链表中除第一个以外的所有大于1的数调用是s()函数,自后向前进行分解。

void fun(nump px)

if(px ==null) return;

nump q,p;

q = px;

fun(q->next);

if(q->x > 1 &&q->next ==null ||q->next->x ==1))

对刚得到的结点中的数进行分解。

fun(q);

运行结果:please input a integer(1~10):

现在开始分解:

10.**设计(满分20分)

一个n位的十进制正整数,如果它的每个位上的数字的n次方的和等于这个数本身,则称其为花朵数。

例如:当n=3时,153就满足条件,因为1^3+5^3+3^3=153,这样的数字也被称为水仙花数(其中,“^表示乘方,5^3表示5的3次方,也就是立方)。

当n=4时,1634满足条件,因为1^4+6^4+3^4+4^4=1634.

当n=5时,92727满足条件。

实际上,对n的每个取值,可能有多个数字满足条件。

程序的任务是:求当n=21时,所有满足条件的水仙花数。注意:这个整数有21位,它的各个位数字的21次方之和正好等于这个数本身。

如果满足条件的数字不只有一个,请从小到大输出所有符合条件的数字,每个数字占一行。因为这个数字很大,请注意解法时间上的可行性。要求程序在3分钟内运行完毕。

解题思路:这是一个组合问题。这个21位的数字是由0~9这十个数字组成的,先统计出该数字中每个数字出现的个数,然后求出各个位上数字的21次方之和(可用查表法),并统计出和中每个数字出现的个数,将每个数字在这个21位数中和在和**现的次数进行比较,若所有的数字出现的次数均相同,则此时的21位数就是一个水仙花数,将其输出。

通过计算我们容易知道,9的21次方为一个21位数(109418989131512359209),因此,在这个21位数当中9最多只能出现9次。

实现方法:使用循环穷举出0~9这十个数字所有可能出现的次数的组合,并进行验证。(由于采用了递归这样比较低效的方法穷举这些组合,导致了最开始程序在运行的时候运行时间远远超过了题目要求,因此本程序中穷举组合数时使用的算法是借鉴于他人的,其源程序另附在**文件夹中,请大家参阅)。

程序**:#include

#define n 21

using namespace std;

void fang(int x);

int arr[10][21];

int main()

int cot[10];

for(int i = 0;i < 10; +i)

* for(int h = 0;h <=9;++h)

max[h] =j;

cout< }

//生成一个n位数并计数该数中每个数字出现的次数。

for(cot[9] =0;cot[9] <9; +cot[9])

for(cot[8] =0;cot[8]

for(cot[7] =0;cot[7]

for(cot[6] =0;cot[6]

for(cot[5] =0;cot[5]

for(cot[4] =0;cot[4]

for(cot[3] =0;cot[3]

for(cot[2] =0;cot[2]

2019C语言模拟题答案

参 一 填空题。注意 逗号表达式的值只取决于最后一个逗号后面的表达式,但前面的表达式也是依次执行的。int a b c 4 是不允许的,但是int a,b,c a b c 4 是允许的,a b c 4 相当于a b c 4 注意c 4不是赋值语句,而是赋值表达式,相当于先把4的值赋给c再执行后面的运...

2019夏考机考模拟题 本科

说明 务必请在d 盘 或e 考试完毕及时在机器上批改打分,并按学院要求上报成绩。一 windows操作题。1 在ks目录有一个 windows题 文件夹,按以下要求完成操作 1 在 windows题 下建立 1 和 user1 文件夹。2 在 windows题 下查找 或搜索 所有的扩展名为rar文...

上海2023年计算机二级C语言考试模拟题

一 单选题。1.以下正确的语句是。a.long b 2 3 b.int a 1 4 c.float x 3 d.double y 3 2.循环语句中,break的作用是 a.结束本次循环。b.从本循环体内跳出。c.跳出子函数。d.终止程序运行。3.有如下函数调用语句,则可以判断该函数的参数个数是 f...