当前位置:首页 » 编程语言 » c语言一本通初赛篇
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言一本通初赛篇

发布时间: 2022-07-10 00:22:03

‘壹’ noip初赛试题 c语言

第十届全国青少年信息学奥林匹克联赛初赛试题
( 普及组 C 语言 二小时完成 )

●● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ●●

一.选择一个正确答案代码(A/B/C/D/E),填入每题的括号内 (每题1.5分, 共30分)

1. 美籍匈牙利数学家冯·诺依曼对计算机科学发展所做出的贡献是( )。
A. 提出理想计算机的数学模型,成为计算机科学的理论基础。
B. 是世界上第一个编写计算机程序的人。
C. 提出存储程序工作原理,并设计出第一台具有存储程序功能的计算机EDVAC。
D. 采用集成电路作为计算机的主要功能部件。
E. 指出计算机性能将以每两年翻一番的速度向前发展。

2. 下列哪个不是CPU(中央处理单元)( )。
A. Intel Itanium B. DDR SDRAM C. AMD Athlon64
D. AMD Opteron E. IBM Power 5

3. 下列网络上常用的名字缩写对应的中文解释错误的是( )。
A. WWW(World Wide Web):万维网。
B. URL(Uniform Resource Locator):统一资源定位器。
C. HTTP(Hypertext Transfer Protocol):超文本传输协议。
D. FTP(File Transfer Protocol):快速传输协议。
E. TCP(Transfer Control Protocol):传输控制协议。

4. 下面哪个部件对于个人桌面电脑的正常运行不是必需的( )。
A. CPU B. 图形卡(显卡) C. 光驱 D. 主板 E. 内存

5. 下列哪个软件属于操作系统软件( )。
A. Microsoft Word B. 金山词霸 C. Foxmail D. WinRAR E. Red Hat Linux

6. 下列哪个不是计算机的存储设备( )。
A. 文件管理器 B. 内存 C. 高速缓存 D. 硬盘 E. U盘

7. 下列说法中错误的是( )。
A. CPU的基本功能就是执行指令。
B. CPU访问内存的速度快于访问高速缓存的速度。
C. CPU的主频是指CPU在1秒内完成的指令周期数。
D. 在一台计算机内部,一个内存地址编码对应唯一的一个内存单元。
E. 数据总线的宽度决定了一次传递数据量的大小,是影响计算机性能的因素之一。

8. 彩色显示器所显示的五彩斑斓的色彩,是由红色、蓝色和( )色混合而成的。
A. 紫 B. 白 C. 黑 D. 绿 E. 橙

9. 用静电吸附墨粉后转移到纸张上,是哪种输出设备的工作方式( )。
A. 针式打印机 B. 喷墨打印机 C. 激光打印机 D. 笔式绘图仪 E. 喷墨绘图仪

10. 一台计算机如果要利用电话线上网,就必须配置能够对数字信号和模拟信号进行相互转换的设备,这种设备是( )。
A. 调制解调器 B. 路由器 C. 网卡 D. 网关 E. 网桥

11. 下列哪个不是数据库软件的名称( )。
A. MySQL B. SQL Server C. Oracle D. 金山影霸 E. Foxpro

12. 下列哪个程序设计语言不支持面向对象程序设计方法( )。
A. C++ B. Object Pascal C. C D. Smalltalk E. Java

13. 由3个a,1个b和2个c构成的所有字符串中,包含子串“abc”的共有( )个。
A. 20 B. 8 C. 16 D. 12 E. 24

14. 某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。已知某时刻该车站状态为空,从这一时刻开始的出入记录为:“进,出,进,进,出,进,进,进,出,出,进,出”。假设车辆入站的顺序为1,2,3,……,则车辆出站的顺序为( )。
A. 1, 2, 3, 4, 5 B. 1, 2, 4, 5, 7 C. 1, 3, 5, 4, 6 D. 1, 3, 5, 6, 7 E. 1, 3, 6, 5, 7

15. 二叉树T,已知其前序遍历序列为1 2 4 3 5 7 6,中序遍历序列为4 2 1 5 7 3 6,则其后序遍历序列为( )。
A. 4 2 5 7 6 3 1 B. 4 2 7 5 6 3 1 C. 4 2 7 5 3 6 1 D. 4 7 2 3 5 6 1 E. 4 5 2 6 3 7 1

16. 满二叉树的叶结点个数为N,则它的结点总数为( )。
A. N B. 2 * N C. 2 * N – 1 D. 2 * N + 1 E. 2N – 1

17. 十进制数2004等值于八进制数( )。
A. 3077 B. 3724 C. 2766 D. 4002 E. 3755

18. (2004)10 + (32)16的结果是( )。
A. (2036)10 B. (2054)16 C. (4006)10 D. (100000000110)2 E. (2036)16

19. 在下图中,从顶点( )出发存在一条路径可以遍历图中的每条边一次,而且仅遍历一次。

A. A点 B. B点 C. C点 D. D点 E. E点

20. 某大学计算机专业的必修课及其先修课程如下表所示:

课程代号 C0 C1 C2 C3 C4 C5 C6 C7
课程名称 高等数学 程序设计语言 离散数学 数据结构 编译技术 操作系统 普通物理 计算机原理
先修课程 C0, C1 C1, C2 C3 C3, C7 C0 C6

请你判断下列课程安排方案哪个是不合理的( )。
A. C0, C6, C7, C1, C2, C3, C4, C5 B. C0, C1, C2, C3, C4, C6, C7, C5
C. C0, C1, C6, C7, C2, C3, C4, C5 D. C0, C1, C6, C7, C5, C2, C3, C4
E. C0, C1, C2, C3, C6, C7, C5, C4

二.问题求解 (每题5分,共10分)

1. 一个家具公司生产桌子和椅子。现在有113个单位的木材。每张桌子要使用20个单位的木材,售价是30元;每张椅子要使用16个单位的木材,售价是20元。使用已有的木材生产桌椅(不一定要把木材用光),最多可以卖 元钱。

2. 75名儿童到游乐场去玩。他们可以骑旋转木马,坐滑行铁道,乘宇宙飞船。已知其中20人这三种东西都玩过,55人至少玩过其中的两种。若每样乘坐一次的费用是5元,游乐场总共收入700,可知有 名儿童没有玩过其中任何一种。

三.阅读程序 (每题8分,共32分)

1.#include <stdio.h>
int main(){
int a = 79, b = 34, c = 57, d = 0, e = -1;
if (a < c || b > c) d = d + e;
else if (d + 10 < e) d = e + 10;
else d = e - a;
printf("%d\n", d);
return 0;
}
输出: 。

2.#include <stdio.h>
int main(){
int i, j;
char str1[] = "pig-is-stupid";
char str2[] = "clever";
str1[0] = 'd'; str1[1] = 'o';
for (i = 7, j = 0; j < 6; i++, j++)
str1[i] = str2[j];
printf("%s\n", str1);
return 0;
}
输出: 。

3.#include <stdio.h>
int main(){
int u[4], a, b, c, x, y, z;
scanf("%d %d %d %d",&(u[0]), &(u[1]), &(u[2]), &(u[3]));
a = u[0] + u[1] + u[2] + u[3] - 5;
b = u[0] * (u[1] - u[2] / u[3] + 8);
c = u[0] * u[1] / u[2] * u[3];
x = (a + b + 2) * 3 - u[(c + 3) % 4];
y = (c * 100 - 13) / a / (u[b % 3] * 5);
if ((x + y) % 2 == 0) z = (a + b + c + x + y) / 2;
z = (a + b + c – x - y) * 2;
printf("%d\n", x + y - z);
return 0;
}
输入:2 5 7 4
输出: 。

4.#include <stdio.h>
char c[3][200];
int s[10], m, n;
void numara(){
int i, j, cod, nr;
for (j = 0; j < n; j++){
nr = 0; cod = 1;
for (i = 0; i < m; i++){
if (c[i][j] == '1'){
if (!cod){cod = 1; s[nr]++; nr = 0;}
}
else{
if (cod){nr = 1; cod = 0;}
else nr++;
}
}
if (!cod) s[nr]++;
}
}
int main(){
int i;
scanf("%d %d\n", &m, &n);
for (i = 0; i < m; i++) gets(c[i]);
numara();
for (i = 1; i <= m; i++)
if (s[i] != 0) printf("%d %d ", i, s[i]);
return 0;
}
输入:
3 10
1110000111
1100001111
1000000011
输出: 。

四、完善程序 (前4空,每空2分,后5空,每空4分,共28分)

1.三角形内切圆的面积
题目描述:
给出三角形三边的边长,求此三角形内切圆(如下图所示,三角形的内切圆是和三角形三边都相切的圆)的面积。

输入:
三个正实数a、b、c(满足a+b>c,b+c>a,c+a>b), 表示三角形三边的边长。
输出:
三角形内切圆的面积,结果四舍五入到小数点后面2位。
输入样例:
3 4 5
输出样例:
3.14
程序:
#include <stdio.h>
#include <math.h>
int main(){
float a, b, c, r, s, t;
scanf("%f %f %f", &a, &b, &c);
s = ( ① ) / 2;
t = ② (s * (s - a) * (s - b) * (s - c));
r = t / s;
printf(" ③ \n", 3.1415927 * r * ④ );
return 0;
}

2.Joseph
题目描述:
原始的Joseph问题的描述如下:有n个人围坐在一个圆桌周围,把这n个人依次编号为1,…,n。从编号是1的人开始报数,数到第m个人出列,然后从出列的下一个人重新开始报数,数到第m个人又出列,…,如此反复直到所有的人全部出列为止。比如当n=6,m=5的时候,出列的顺序依次是5,4,6,2,3,1。
现在的问题是:假设有k个好人和k个坏人。好人的编号的1到k,坏人的编号是k+1到2k。我们希望求出m的最小值,使得最先出列的k个人都是坏人。
输入:
仅有的一个数字是k(0 < k <14)。
输出:
使得最先出列的k个人都是坏人的m的最小值。
输入样例:
4
输出样例:
30
程序:
#include <stdio.h>
long k, m, begin;
int check(long remain){
long result = ( ① ) % remain;
if ( ② ){
begin = result; return 1;
}
else return 0;
}
int main(){
long i, find = 0;
scanf("%ld", &k);
m = k;
while( ③ ) {
find = 1; begin = 0;
for (i = 0; i < k; i++)
if (!check( ④ )){
find = 0; break;
}
m++;
}
printf("%ld\n", ⑤ );
return 0;
}

赛区 市 学校 姓名

========================== 密 封 线 =======================

第九届全国青少年信息学奥林匹克联赛初赛试题

普及组答卷纸

阅 卷 记 录
总阅卷人 总 得 分
第 一 大 题 得 分 第二大题得分
题号 1 2 3 4 5 6 7 8 9 10 第三大题得分
得分 1) 2) 3) 4)
题号 11 12 13 14 15 16 17 18 19 20 第四大题得分
得分 (1) (2)

============================ 以下由考生填写 ==============================

答卷部分

一. 选择一个正确答案代码(A/B/C/D),填入每题的括号内 (每题1.5分,多选无分, 共30 分)

题号 1 2 3 4 5 6 7 8 9 10
选择
题号 11 12 13 14 15 16 17 18 19 20
选择

二.问题解答 (每题5分,共10分)

1. 答:

2. 答:

三. 阅读程序,并写出程序的正确运行结果:(每题8分,共32分)

(1) 程序的运行结果是:

(2) 程序的运行结果是:

赛区 市 学校 姓名

========================== 密 封 线 =======================

(3) 程序的运行结果是:

(4)程序的运行结果是:

四.根据题意, 将程序补充完整 (前4空,每空2分,后5空,每空4分,共28分)

C 语言
=================

1.









2.











第九届全国青少年信息学奥林匹克联赛初赛试题
普及组参考答案
一. 选择一个正确答案代码(A/B/C/D/E),填入每题的括号内 (每题1.5分,多选无分, 共30 分)
题号 1 2 3 4 5 6 7 8 9 10
选择 C B D C E A B D C A
题号 11 12 13 14 15 16 17 18 19 20
选择 D C D E B C B D E D
二.问题解答 (每题5分,共10分)
1. 答: 160
2. 答: 10

三. 阅读程序,并写出程序的正确运行结果:(每题8分,共32分)
(1)程序的运行结果是: -80
(2) 程序的运行结果是: dog-is-clever
(3)程序的运行结果是: 263
(4)程序的运行结果是: 1 4 2 1 3 3

四.根据题意, 将程序补充完整 (前4空,每空2分,后5空,每空4分,共28分)

C 语言
=================
1.

① a+b+c

② sqrt

③ %.2f

④ r

2.

① begin+m-1

② result>=k (或者k<=result)

③ !find (或者 find==0)

④ 2*k-i

⑤ m-1

‘贰’ 第16届NOIP初赛普及组C语言答案

CCF NOIP2010普及组(C语言)参考答案与评分标准

一、单项选择题(共20题,每题1.5分,共计30分)
1 2 3 4 5 6 7 8 9 10
D A A D A D B D C B
11 12 13 14 15 16 17 18 19 20
D B B B B A A D C D
二、问题求解(共2题,每题5分,共计10分)
1.2-2-1-2-3-1-1-3-4-3-1-2-1-3-5-3-6(或22123113431213536)
2.49
三、阅读程序写结果(共4题,每题8分,其中第4题(1)、(2)各4分,共计32分)1.2 20 77 91
2.99 101 111
3.120 112
4.(1)1
(2)4
四、完善程序(前4空,每空2.5分,后6空,每空3分,共计28分)
(说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查)
1.① tmp = 1
② p[j]
③ p[r] = i
④ p[j] + p[k](或p[k] + p[j])
⑤ 1004
2.① num <= 2(或num < 3 或num == 2)
② go(LEFT_TO_RIGHT)
③ pos[i] == LEFT(或LEFT == pos[i])
④ time[i] + go(RIGHT_TO_LEFT)(或go(RIGHT_TO_LEFT) + time[i])
⑤ pos[i] = LEFT
本小题中,LEFT可用1代替,LEFT_TO_RIGHT可用1代替,RIGHT_TO_LEFT可用0代替。

‘叁’ C语言全国普及组竞赛初赛要掌握哪些东西才能进入复赛

基本数据结构、算法、算法分析、基本离散数学知识

‘肆’ 第十五届信息学奥赛联赛普及组C语言初赛试题及答案

这个东西好找么?

‘伍’ 求试题,17届NOIP(C语言)普及组初赛试题

一、单项选择题(共20题,每题1.5分,共计30分。每题有且仅有一个正确选项。)
1.在二进制下,1101001 + ( ) = 1110110。
A. 1011 B. 1101 C. 1010 D. 1111
2.字符“0”的ASCII码为48,则字符“9”的ASCII码为( )。
A. 39 B. 57 C. 120 D. 视具体的计算机而定
3.一片容量为8GB的SD卡能存储大约( )张大小为2MB的数码照片。
A. 1600 B. 2000 C. 4000 D. 16000
4.摩尔定律(Moore's law)是由英特尔创始人之一戈登•摩尔(Gordon Moore)提出来的。根据摩尔定律,在过去几十年以及在可预测的未来几年,单块集成电路的集成度大约每( )个月翻一番。
A. 1 B. 6 C. 18 D. 36

5.无向完全图是图中每对顶点之间都恰有一条边的简单图。已知无向完全图G有7个顶点,则它共有( )条边。
A. 7 B. 21 C. 42 D. 49

6.寄存器是( )的重要组成部分。
A. 硬盘 B. 高速缓存 C. 内存 D. 中央处理器(CPU)

7.如果根结点的深度记为1,则一棵恰有2011个叶结点的二叉树的深度最少是( )。
A. 10 B. 11 C. 12 D. 13

8. 体育课的铃声响了,同学们都陆续地奔向操场,按老师的要求从高到矮站成一排。每个同学按顺序来到操场时,都从排尾走向排头,找到第一个比自己高的同学,并站在他的后面。这种站队的方法类似于( )算法 。
A. 快速排序 B. 插入排序 C. 冒泡排序 D. 归并排序

9.一个正整数在二进制下有100位,则它在十六进制下有( )位。
A. 7 B. 13 C. 25 D. 不能确定

10.有人认为,在个人电脑送修前,将文件放入回收站中就是已经将其删除了。这种想法是( )。
A. 正确的,将文件放入回收站意味着彻底删除、无法恢复
B. 不正确的,只有将回收站清空后,才意味着彻底删除、无法恢复
C. 不正确的,即使将回收站清空,文件只是被标记为删除,仍可能通过恢复软件找回
D. 不正确的,只要在硬盘上出现过的文件,永远不可能被彻底删除

11.广度优先搜索时,需要用到的数据结构是( )。
A. 链表 B. 队列 C. 栈 D. 散列表

12.在使用高级语言编写程序时,一般提到的“空间复杂度”中的“空间”是指( )。
A. 程序运行时理论上所占的内存空间
B. 程序运行时理论上所占的数组空间
C. 程序运行时理论上所占的硬盘空间
D. 程序源文件理论上所占的硬盘空间

13.在含有n个元素的双向链表中查询是否存在关键字为k的元素,最坏情况下运行的时间复杂度是( )。
A. O(1) B. O(log n) C. O(n) D. O(n log n)

14.生物特征识别,是利用人体本身的生物特征进行身份认证的一种技术。目前,指纹识别、虹膜识别、人脸识别等技术已广泛应用于政府、银行、安全防卫等领域。以下不属于生物特征识别技术及其应用的是( )。
A. 指静脉验证 B. 步态验证 C. ATM机密码验证 D. 声音验证

15.现有一段文言文,要通过二进制哈夫曼编码进行压缩。简单起见,假设这段文言文只由4个汉字“之”、“乎”、“者”、“也”组成,它们出现的次数分别为700、600、300、200。那么,“也”字的编码长度是( )。
A. 1 B. 2 C. 3 D. 4

16.关于汇编语言,下列说法错误的是( )。
A. 是一种与具体硬件相关的程序设计语言
B. 在编写复杂程序时,相对于高级语言而言代码量较大,且不易调试
C. 可以直接访问寄存器、内存单元、以及I/O端口
D. 随着高级语言的诞生,如今已完全被淘汰,不再使用

17.( )是一种选优搜索法,按选优条件向前搜索,以达到目标。当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。
A. 回溯法 B. 枚举法 C. 动态规划 D. 贪心法

18.1956年( )授予肖克利(William Shockley)、巴丁(John Bardeen)和布拉顿(Walter Brattain),以表彰他们对半导体的研究和晶体管效应的发现。
A. 诺贝尔物理学奖
B. 约翰•冯•诺依曼奖
C. 图灵奖
D. 高德纳奖(Donald E. Knuth Prize)

19.对一个有向图而言,如果每个节点都存在到达其他任何节点的路径,那么就称它是强连通的。例如,右图就是一个强连通图。事实上,在删掉边( )后,它依然是强连通的。
A. a B. b C. c D. d

20.从ENIAC到当前最先进的计算机,冯•诺依曼体系结构始终占有重要的地位。冯•诺依曼体系结构的核心内容是( )。
A. 采用开关电路 B. 采用半导体器件
C. 采用存储程序和程序控制原理 D. 采用键盘输入

二、问题求解(共2题,每题5分,共计10分)

1.每份考卷都有一个8位二进制序列号。当且仅当一个序列号含有偶数个1时,它才是有效的。例如,00000000、01010011都是有效的序列号,而11111110不是。那么,有效的序列号共有________个。

2.定义字符串的基本操作为:删除一个字符、插入一个字符和将一个字符修改成另一个字符这三种操作。将字符串A变成字符串B的最少操作步数,称为字符串A到字符串B的编辑距离。字符串"ABCDEFG"到字符串"BADECG"的编辑距离为________。

三、阅读程序写结果(共4题,每题8分,共计32分)

1.
#include<stdio.h>
int main() {
int i, n, m, ans;

scanf("%d%d", &n, &m);
i = n;
ans = 0;
while (i <= m) {
ans += i;
i++;
}
printf("%d\n", ans);
return 0;
}
输入:10 20
输出:_________

2.
#include <stdio.h>
#include <string.h>
#define SIZE 20

int main()
{
char map[] = "22233344455566677778889999";
char tel[SIZE];
int i;

scanf("%s", tel);
for (i = 0; i < strlen(tel); i++)
if ((tel[i] >= '0') && (tel[i] <= '9'))
printf("%c", tel[i]);
else if ((tel[i] >= 'A') && (tel[i] <= 'Z'))
printf("%c", map[tel[i] - 'A']);
return 0;
}

输入:CCF-NOIP-2011
输出:_________

3.
#include <stdio.h>
#include <string.h>
#define SIZE 100

int main()
{
int n, i, sum, x, a[SIZE];

scanf("%d", &n);
memset(a, 0, sizeof(a));
for (i = 1; i <= n; i++) {
scanf("%d", &x);
a[x]++;
}

i = 0;
sum = 0;
while (sum < (n / 2 + 1)) {
i++;
sum += a[i];
}
printf("%d\n", i);
return 0;
}

输入:
11
4 5 6 6 4 3 3 2 3 2 1
输出:_________

4.
#include <stdio.h>

int solve(int n, int m)
{
int i, sum;

if (m == 1)
return 1;
sum = 0;
for (i = 1; i < n; i++)
sum += solve(i, m - 1);
return sum;
}

int main()
{
int n, m;

scanf("%d %d", &n, &m);
printf("%d\n", solve(n, m));
return 0;
}

输入:7 4
输出:_________

四、完善程序(前11空,每空2分,后2空,每空3分,共计28分)

1.(子矩阵)输入一个n1*m1的矩阵a,和n2*m2的矩阵b,问a中是否存在子矩阵和b相等。若存在,输出所有子矩阵左上角的坐标;若不存在输出“There is no answer”。

#include <stdio.h>
#define SIZE 50

int n1, m1, n2, m2, a[SIZE][SIZE], b[SIZE][SIZE];

int main()
{
int i, j, k1, k2, good, haveAns;

scanf("%d %d", &n1, &m1);
for (i = 1; i <= n1; i++)
for (j = 1; j <= m1; j++)
scanf("%d", &a[i][j]);
scanf("%d %d", &n2, &m2);
for (i = 1; i <= n2; i++)
for (j = 1; j <= m2; j++)
① ;

haveAns = 0;
for (i = 1; i <= n1 - n2 + 1; i++)
for (j = 1; j <= ② ; j++) {
③ ;
for (k1 = 1; k1 <= n2; k1++)
for (k2 = 1; k2 <= ④ ; k2++) {
if (a[i + k1 - 1][j + k2 - 1] != b[k1][k2])
good = 0;
}
if (good == 1) {
printf("%d %d\n", i, j);
⑤ ;
}
}
if (haveAns == 0)
printf("There is no answer\n");
return 0;
}

2.(大整数开方)输入一个正整数n(1≤n<10100),试用二分法计算它的平方根的整数部分。

#include <stdio.h>
#include <string.h>
#define SIZE 200

typedef struct node {
int len, num[SIZE];
} hugeint;
//其中len表示大整数的位数;num[1]表示个位、num[2]表示十位,以此类推

hugeint times(hugeint a, hugeint b)
//计算大整数a和b的乘积
{
int i, j;
hugeint ans;

memset(ans.num, 0, sizeof(ans.num));
for (i = 1; i <= a.len; i++)
for (j = 1; j <= b.len; j++)
① += a.num[i] * b.num[j];
for (i = 1; i <= a.len + b.len; i++) {
ans.num[i + 1] += ans.num[i] / 10;
② ;
}
if (ans.num[a.len + b.len] > 0)
ans.len = a.len + b.len;
else
ans.len = a.len + b.len - 1;
return ans;
}

hugeint add(hugeint a, hugeint b)
//计算大整数a和b的和
{
int i;
hugeint ans;

memset(ans.num, 0, sizeof(ans.num));
if (a.len > b.len)
ans.len = a.len;
else
ans.len = b.len;
for (i = 1; i <= ans.len; i++) {
ans.num[i] += ③ ;
ans.num[i + 1] += ans.num[i] / 10;
ans.num[i] %= 10;
}
if (ans.num[ans.len + 1] > 0)
ans.len++;
return ans;
}

hugeint average(hugeint a, hugeint b)
//计算大整数a和b的平均数的整数部分
{
int i;
hugeint ans;

ans = add(a, b);
for (i = ans.len; i >= 2; i--) {
ans.num[i - 1] += ( ④ ) * 10;
ans.num[i] /= 2;
}
ans.num[1] /= 2;
if (ans.num[ans.len] == 0)
ans.len--;
return ans;
}

hugeint plustwo(hugeint a)
//计算大整数a加2后的结果
{
int i;
hugeint ans;

ans = a;
ans.num[1] += 2;
i = 1;
while ((i <= ans.len) && (ans.num[i] >= 10)) {
ans.num[i + 1] += ans.num[i] / 10;
ans.num[i] %= 10;
i++;
}
if (ans.num[ans.len + 1] > 0)
⑤ ;
return ans;
}

int over(hugeint a, hugeint b)
//若大整数a>b则返回1,否则返回0
{
int i;

if ( ⑥ )
return 0;
if (a.len > b.len)
return 1;
for (i = a.len; i >= 1; i--) {
if (a.num[i] < b.num[i])
return 0;
if (a.num[i] > b.num[i])
return 1;
}
return 0;
}

int main()
{
char s[SIZE];
int i;
hugeint target, left, middle, right;

scanf("%s", s);
memset(target.num, 0, sizeof(target.num));
target.len = strlen(s);
for (i = 1; i <= target.len; i++)
target.num[i] = s[target.len - i] - ⑦ ;
memset(left.num, 0, sizeof(left.num));
left.len = 1;
left.num[1] = 1;
right = target;
do {
middle = average(left, right);
if (over( ⑧ ) == 1)
right = middle;
else
left = middle;
} while (over(plustwo(left), right) == 0);
for (i = left.len; i >= 1; i--)
printf("%d", left.num[i]);
printf("\n");
return 0;
}

‘陆’ 求NOIP C语言 普及组 初赛模拟试题 急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

信息学奥林匹克联赛初赛模拟试题
(普及组 C语言 二小时完成)
一、选择一个正确答案代码(A/B/C/D/E),填入每题的括号内(每题1.5分,共30分)
1.在计算机科学领域,提出“程序=数据结构+算法”的是( )。
A、D.Ritchie B、N.Wirth C、Von Neumann D、Alan Turing E、B.Kernighan
2.下列哪个是最早的计算机程序设计语言( )。
A、C++ B、Java C、FORTRAN D、PASCAL E、COBOL
3.下列软件不是数据库处理软件的是( )。
A、DB2 B、FoxPro C、Foxmail D、Oracle E、Sybase
4.下列哪个公司是生产CPU(中央处理器)的主要公司( )。
A、 Seagate B、AMD C、KINGSTONE D、BENQ E、Sony
5.在微型计算机中,微处理器的主要功能是进行( )。
A、算术逻辑运算及全机的控制
B、逻辑运算
C、算术逻辑运算
D、算术运算
6.DRAM存储器的中文含义是( )。
A、静态随机存储器
B、动态只读存储器
C、静态只读存储器
D、动态随机存储器
7.操作系统的主要功能是( )。
A、控制和管理计算机系统软硬件资源
B、对汇编语言、高级语言和甚高级语言程序进行翻译
C、管理用各种语言编写的源程序
D、管理数据库文件
8.在Windows中,将某个应用程序窗口最小化之后,该应用程序( )。
A、仍在后台运行 B、暂时停止运行 C、完全停止运行 D、出错
9.网络互联实现在更大的范围内传输数据和共享资源,要解决两个问题:一是网络之间要有通信链路,二是提供( )。
A、协议转换功能 B、数据库管理功能 C、安全保密功能 D、信息传输功能
10.Internet网是目前世界上第一大互联网,它起源于美国,其雏形是( )。
A、NCFC B、CERNET C、GBNET D、ARPANET E、CSTNET
11.下列无符号数中,最小的是( )。
A、(11111010110)2 B、(3730)8 C、(2007)10 D、(7D9)16
12.已知集合A={1,2,3,4,5,6,7,8},则A的不含2和4的非空子集的个数为( )。
A、255 B、127 C、63 D、31 E、15
13.C语言中,如果整型变量a=125,则执行操作a>>=2;之后,a的值是( )。
A、1000 B、123 C、127 D、31 E、32
14.对于栈来说,若进栈序列为1、2、3、4、5、6,进栈过程中可以出栈,则下列出栈序列中不可能的是。( )。
A、134256 B、243165 C、345621 D、145623 E、132465
15.一棵完全二叉树的结点总数为18,其叶结点数为( )。
A、7个 B、8个 C、9个 D、10个 E、11个
16.设G是一个非连通无向图,共有28条边,则该图至少有( )个顶点。
A、8 B、9 C、10 D、6
17.对于一个无向带权图G=(V,E),其中V={a,b,c,d,e},E={(a,b),(a,c),(b,d),(c,d),(e,d),(c,e), (a,d),(b,e)},E中边的权值分别为{1,4,2,5,3,1,2,3},则其最小生成树上各边的权值之和为( )。
A、6 B、7 C、8 D、9
18.如右所示的有向无环图,对该图进行拓朴排序,得到
的顶点序列正确的是( )。
A、1,2,5,3,4,6,8,7
B、1,3,6,5,2,8,7,4
C、1,2,3,4,5,6,7,8
D、1,3,2,4,5,7,8,6
19.给出一组数据:10、18、3、4、9、13、15、2、21、9、8,将它们生成一棵二叉排序树,所需要的关键码的比较次数为( )。
A、25 B、24 C、23 D、22
20.对给定的整数序列(541,132,984,746,518,181,946,314,205,827)进行从小到大的排序时,采用快速排序(以中间元素518为基准)的第一趟扫描结果是( )。
A、(181,132,314,205,541,518,946,827,746,984)
B、(205,132,314,181,518,746,946,984,541,827)
C、(541,132,827,746,518,181,946,314,205,984)
D、(541,132,984,746,827,181,946,314,205,518)

二、问题求解(每题5分,共10分)
1.在1,2,3,4中任取2个数,同时要求这两个数不相邻,有3种选取方法:1,3;1,4;2,4。那么在1~9共9个数中,任取3个数,同时要求这4个数中没有相邻的数,它的选取方法有 种。
2.下面一个街区,纵向街道m条,横向街道n条,设A点坐标为(1,1),则B点坐标为(m,n),当中有一点C,其坐标为(i,j)。某人从A点走到对角B点,要求必须向上或向右走,则经过其中的C点的走法一共有 种。

三、阅读程序(每题8分,共32分)
1.#include <stdio.h>
main(){
int a,b,c,x,y,z,u[4];
scanf("%d%d%d%d",&u[0],&u[1],&u[2],&u[3]);
a=u[0]+u[1]+u[2]+u[3]-8;
b=u[0]*(u[1]+u[2]/u[3]-a);
c=u[0]*u[1]/u[2]*u[3];
x=(a+b+c)*3-u[3*c/4];
y=(a*b*c-13)/(u[b/3]*5);
if ((x+y)%2==0) z=(a+b+c+x+y)/2;
else z=(a+b+c-x-y)/2;
printf("%d\n",x-y+z);
}
输入:2 5 7 4

2.#include <stdio.h>
main(){
int hi,lo,m,n;
scanf("%d%d",&m,&n);
hi=0; lo=0;
do{
n--; lo+=m;
if (lo>=10000) { lo-=10000; hi++; }
} while (n!=0);
printf("%4d,%4d\n",hi,lo);
}
输入:345 208
输出:

3.#include <stdio.h>
main(){
int i,j,p,n,q,s,a[21];
scanf("%d%d%d",&p,&n,&q);
j=21;
while (n>0){
j--; a[j]=n%10; n/=10;
}
s=0;
for (i=j;i<=20;i++)
s=s*p+a[i];
printf("%d\n",s);
j=21;
while (s>0){
j--; a[j]=s%q; s/=q;
}
for (i=j;i<=20;i++)
printf("%d",a[i]);
}
输入:7 3051 8
输出:

4.#include <stdio.h>
#include <string.h>
main(){
int n,m,i,j;
char x,st[10],a[10][10];
scanf("%s",st);
n=strlen(st);m=n/2;
for (i=0;i<n;i++)
for (j=0;j<n;j++) a[i][j]=' ';
for (i=0;i<=m;i++)
for (j=i;j<n-i;j++){
x=st[j];
a[i][j]=a[n-i-1][n-j-1]=x;
}
for (j=n-1;j>=0;j--){
for (i=0;i<n;i++)
printf("%2c",a[i][j]);
printf("\n");
}
}
输入:ACEGIKM
输出:

四、完善程序(前4空每空3分,后4空,每空4分,共28分)
1、对于给定的一个正整数,从其个位数开始,每隔一位取一个数字(即取其个位、百位、万位等数字),形成一个新的整数并输出。例如:运行时若输入“14251382”,则输出的整数为“4532”。
请完善下列程序:
#include <stdio.h>
main(){
long n,num;
int i,k;
scanf(“%d”,&n);
k=1; num=0;
for (i=1;n>0;i++){
if ①
{
num=num+ ② ;
k=k*10;
}
③ ;
}
printf(“%d\n”,num);
}

2、设某城市有 n 个车站,并有 m 条公交线路连接这些车站,设这些公交车都是单向的,这 n 个车站被顺序编号为0 至 n-1 。本程序,输入该城市的公交线路数、车站个数, 以及各公交线路上的各站编号,求得从站0出发乘公交 车至站 n-1 的最少换车次数。
程序利用输入信息构建一张有向图 G (用邻接矩阵 g 表示),有向图的顶点是车站,若有某条公交线路经 i 站能到达 j 站,就在顶点 i 到顶点 j 之间设置一条权为 1 的有向边<i,j>。如是这样,从站点 x 至站点 y 的最少上车次数便对应图 G 中从点 x 至点 y 的最短路径长度。而程序要求的换车次数就是上车次数减 1 。
程序的输入格式:
第一行为两个整数m和n,分别表示公交线路数和公交站数。
接下来m行数据,每一行为沿第m条公交车线路前进方向的各站编号dd(0<=dd<n),每行数字以-1结束。
请完善下面的程序:
#include <stdio.h>
#define M 20
#define N 50
int a[N+1]; /*用于存放一条线路上的各站编号*/
int g[N][N]; /*存储对应的邻接矩阵*/
int dist[N]; /*存储站0到各站的最短路径*/
int m,n;
void buildG(){
int i,j,k,sc,dd;
scanf("%d%d",&m,&n);
for (i=0; i<n; i++)
for (j=0; j<n; j++) g[i][j]=0;
for (i=0; i<m; i++){
sc=0;
while (1){
scanf("%d", &dd);
if (dd==-1) break;
if (dd>=0 && dd<n) ④ ;
}
a[sc]=-1;
for (k=1; a[k]>=0; k++)
for (j=0; j<k; j++)
g ⑤ =1;
}
}
int minLen(){
int j,k;
for (j=0; j<n; j++) dist[j]=g[0][j];
dist[0]=1;
do {
for (k=-1, j=0 ; j<n; j++)
if (dist[j] > 0 && (k == -1 || dist[j] < dist[k]))
k = j;
if (k<0 || k==n-1) break;
dist[k]=-dist[k];
for (j=1; j<n; j++)
if ( ⑥ && (dist[j]==0 || -dist[k]+1<dist[j]) )
⑦ ;
} while (1);
j = dist [n-1];
return ⑧ ;
}
main ( ){
int t;
buildG();
if ((t=minLen())<0) printf("No answer!\n");
else printf("%d\n",n-1,t);
}

参考答案
一、
1、B 2、C 3、C 4、B 5、A 6、D 7、A 8、A 9、A 10、D
11、C 12、C 13、D 14、D 15、C 16、B 17、B 18、C 19、D 20、B

二、
1、41
2、

三、
1、18
2、7,1760
3、1065
2051
4、(注:每相邻的两个字符之间空1格)
M A
K K C C
I I I E E E
G G G G G G G
E E E I I I
C C K K
A M

四、
1、
①(i%2==1)
②(n%10)*k
③n=n/10
2、
④a[sc++]=dd
⑤[a[j]][a[k]]
⑥dist[j]>=0 && g[k][j]==1
⑦-dist[k]+1
⑧k<0 ? -1 : j-1

‘柒’ 谁有历届全国青少年信息学奥赛试题(初赛C语言)

我也是10月20日去参赛NOIP的啊,去在
www.noi.cn
仔细找,有答案有题目

‘捌’ 求第十四届信息学奥赛联赛普及组c语言初赛试题 第三大题第4题解析 详细点

知道前序遍历和中序遍历,求后序遍历,这就是程序的目的

‘玖’ 推荐几本关于C语言的学习的书

覃浩强咯 C语言程序设计

‘拾’ 求四川历年NOIP C语言试题 初赛

第十二届全国青少年信息学奥林匹克联赛初赛试题
( 提高组 Pascal 语言 二小时完成 )
●● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ●●
一、 单项选择题 (共 10 题,每题 1.5 分,共计 15 分。每题有且仅有一个正确答案.)。
1. 在以下各项中。( )不是 CPU 的组成部分。
A. 控制器 B. 运算器 C. 寄存器 D. ALU E. RAM
2. BIOS(基本输入输出系统)是一组固化在计算机内( )上一个 ROM 芯片上的程序。
A. 控制器 B. CPU C. 主板 D. 内存条 E. 硬盘
3.在下面各世界顶级的奖项中,为计算机科学与技术领域作出杰出贡献的科学家设立的奖项是( )。
A. 沃尔夫奖 B. 诺贝尔奖 C. 菲尔兹奖
D. 图灵奖 E. 南丁格尔奖
4.在编程时(使用任一种高级语言,不一定是 Pascal),如果需要从磁盘文件中输入一个很大的二维 数组(例如 1000*1000 的 double 型数组),按行读(即外层循环是关于行的)与按列读(即外层循 环是关于列的)相比,在输入效率上( )。
A. 没有区别 B. 有一些区别,但机器处理速度很快,可忽略不计
C. 按行读的方式要高一些 D. 按列读的方式要高一些 E. 取决于数组的存储方式。
5.在 Pascal 语言中,表达式 (21 xor 2)的值是( )
A. 441 B. 42 C.23 D.24 E.25
6.在 Pascal 语言中,判断 a 不等于 0 且 b 不等于 0 的正确的条件表达式是( )
A. not a=0 or not b=0 B. not((a=0)and(b=0)) C. not(a=0 and b=0) D. (a<>0)or(b<>0) E. (a<>0)and (b<>0)
7.某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。已知某时刻该车站状态为空,从 这一时刻开始的出入记录为:“进,出,进,进,进,出,出,进,进,进,出,出”。假设车辆入站的 顺序为 1,2,3,……,则车辆出站的顺序为( )。
A. 1, 2, 3, 4, 5 B. 1, 2, 4, 5, 7 C. 1, 4, 3, 7, 6
D. 1, 4, 3, 7, 2 E. 1, 4, 3, 7, 5
8.高度为 n 的均衡的二叉树是指:如果去掉叶结点及相应的树枝,它应该是高度为 n-1 的满二叉树。在这里,树高等于叶结点的最大深度,根结点的深度为 0,如果某个均衡的二叉树共有 2381 个结点, 则该树的树高为( )。
A. 10 B. 11 C. 12 D. 13 E. 210 – 1
9. 与十进制数 1770.625 对应的八进制数是( )。由OIFans.cn收集
A. 3352.5 B. 3350.5 C. 3352.1161
D. 3350.1151 E. 前 4 个答案都不对
10.将 5 个数的序列排序,不论原先的顺序如何,最少都可以通过( )次比较,完成从小到大的排序。
A. 6 B. 7 C. 8 D. 9 E. 10
二、 不定项选择题 (共 10 题,每题 1.5 分,共计 15 分。每题正确答案的个数大于或等于 1。多选 或少选均不得分)。
11. 设A=B=D=true,C=E=false,以下逻辑运算表达式值为真的有( )。
A. ( A∧B)∨(C∧D)∨E B. (((A∧B)∨C)∧D∧E)
C. A∧(B∨C∨D∨E) D. (A∧(B∨C)) ∧D∧E
12. (2010)16 + (32)8的结果是( )。
A. (8234)10 B. (202A)16
C. (100000000110)2 D. (2042)16
13. 设栈S的初始状态为空,元素a, b, c, d, e 依次入栈,以下出栈序列不可能出现的有( )。
A. a, b, c, e, d B. b, c, a, e, d
C. a, e, c, b, d D. d, c, e, b, a
14. 已知 6 个结点的二叉树的先根遍历是 1 2 3 4 5 6(数字为结点的编号,以下同),后根遍历是
3 2 5 6 4 1,则该二叉树的可能的中根遍历是( )由OIFans.cn收集
A. 3 2 1 4 6 5 B. 3 2 1 5 4 6
C. 2 3 1 5 4 6 D. 2 3 1 4 6 5
15. 在下列各数据库系统软件中,以关系型数据库为主体结构的是( )。
A. ACCESS B. SQL Server
C. Oracle D. Foxpro
16.在下列各软件中,属于 NOIP 竞赛(复赛)推荐使用的语言环境有( )。
A. gcc/g++ B. Turbo Pascal
C. Turbo C D. free pascal
17. 以下断电之后将不能保存数据的有( )。
A. 硬盘 B. ROM C. 显存 D. RAM
18. 在下列关于计算机语言的说法中,正确的有( )。
A. Pascal和C都是编译执行的高级语言
B. 高级语言程序比汇编语言程序更容易从一种计算机移植到另一种计算机上
C. C++是历史上的第一个支持面向对象的计算机语言
D. 高级语言比汇编语言更高级,是因为它的程序的运行效率更高
19. 在下列关于计算机算法的说法中,正确的有( )。
A. 一个正确的算法至少要有一个输入
B. 算法的改进,在很大程度上推动了计算机科学与技术的进步由OIFans.cn收集
C. 判断一个算法的好坏,主要依据它在某台计算机上具体实现时的运行时间
D. 目前仍然存在许多涉及到国计民生的重大课题,还没有找到能够在计算机上实施的有效算法
20. 在下列关于青少年信息学竞赛的说法中,你赞成的是( )(本题不回答为0分,答题一律满分)。
A. 举行信息学竞赛的目的,是为了带动广大青少年学科学、爱科学,为造就一大批优秀的计算机科学 与技术人才奠定良好的基础
B. 如果竞赛优胜者不能直接保送上大学,我今后就不再参与这项活动了
C. 准备竞赛无非要靠题海战术,为了取得好成绩,就得拼时间、拼体力
D. 为了取得好成绩,不光要看智力因素,还要看非智力因素。优秀选手应该有坚韧不拔的意志,有 严谨求实的作风,既要努力奋进,又要胜不骄败不馁
三.问题求解(共 2 题,每题 5 分,共计 10 分)
1.将 2006 个人分成若干不相交的子集,每个子集至少有 3 个人,并且:
(1)在每个子集中,没有人认识该子集的所有人。
(2)同一子集的任何 3 个人中,至少有 2 个人互不认识。
(3)对同一子集中任何 2 个不相识的人,在该子集中恰好只有 1 个人认识这两个人。 则满足上述条件的子集最多能有 个?
2.将边长为 n 的正三角形每边 n 等分,过每个分点分别做另外两边的平行线,得到若干个正三角形, 我们称为小三角形。正三角形的一条通路是一条连续的折线,起点是最上面的一个小三角形,终点是最 下面一行位于中间的小三角形。在通路中,只允许由一个小三角形走到另一个与其有公共边的且位于同 一行或下一行的小三角形,并且每个小三角形不能经过两次或两次以上(图中是 n=5 时一条通路的例 子)。设 n=10,则该正三角形的不同的通路的总数为_ __。

四.阅读程序写结果(共 4 题,每题 8 分,共计 32 分)
1. Program ex401;
var
u,v:array[0..3] of integer;
i,x,y:integer;
begin
x:=10; y:=10;
for i:=0 to 3 do read(u[i]);
v[0]:=(u[0]+u[1]+u[2]+u[3]) div 7; v[1]:=u[0] div ((u[1]-u[2]) div u[3]); v[2]:=u[0]*u[1] div u[2]*u[3]; v[3]:=v[0]*v[1];
x:=(v[0]+v[1]+2)-u[(v[3]+3) mod 4];
if (x>10) then
y:=y+(v[2]*100-v[3]) div (u[u[0] mod 3]*5)由OIFans.cn收集
else
y:=y+20+(v[2]*100-v[3]) div (u[v[0] mod 3]*5);
writeln (x,',',y);
end. {*注:本例中,给定的输入数据可以避免分母为 0 或下标越界。 )
输入:9 3 9 4
输出:
2.Program ex402;
const
m:array[0..4] of integer=(2,3,5,7,13);
var i,j:integer; t: longint; begin
for i:=0 to 4 do begin
t:=1;
for j:=1 to m[i]-1 do t:=t*2;
t:=(t*2-1)*t; write (t,' '); end;
writeln;
end.
输出:_____
3. Program ex403;
Const NN=7; Type
Arr1=array[0..30] of char;
var s:arr1;
k,p:integer;
function fun1(s:arr1; a:char;n:integer):integer;
var j:integer; begin
j:=n;
while (a<s[j])and(j>0) do dec(j);
fun1:=j;
end;
Function fun2(s:arr1; a:char; n:integer):integer;
var j:integer; begin
j:=1;
while (a>s[j])and(j<n) do inc(j);
fun2:=j;
end;
begin
for k:=1 to NN do s[k]:=chr(ord('A')+2*k+1);
k:=fun1(s,'M',NN)+fun2(s,'M',NN);
writeln(k);
end.
输出:
4. program ex404;
var x,x2:longint;由OIFans.cn收集
procere digit(n,m:longint);
var n2:integer;
begin
if(m>0) then begin
n2:=n mod 10;
write(n2:2);
if(m>1) then digit(n div 10,m div 10);
n2:=n mod 10; write(n2:2); end;
end;
begin
writeln('Input a number:');
readln(x);
x2:=1;
while(x2<x) do x2:=x2*10;
x2:=x2 div 10; digit(x,x2); writeln;
end.
输入:9734526
输出:
五.完善程序 (前 5 空,每空 2 分,后 6 空,每空 3 分,共 28 分)
1.(选排列)下面程序的功能是利用递归方法生成从 1 到 n(n<10)的 n 个数中取 k(1<=k<=n)个数的 全部可能的排列(不一定按升序输出)。例如,当 n=3,k=2 时,应该输出(每行输出 5 个排列):
12 13 21 23 32
31
程序:
Program ex501; Var i,n,k:integer;
a:array[1..10] of integer;
count:longint;
Procere perm2(j:integer);
var i,p,t:integer;
begin
if ① then
begin
for i:=k to n do begin inc(count);
t:=a[k]; a[k]:=a[i]; a[i]:=t;
for ② do write(a[p]:1);
write(' ');
t:=a[k];a[k]:=a[i];a[i]:=t;
if (count mod 5=0) then writeln;
end; exit; end;
for i:=j to n do begin
t:=a[j];a[j]:=a[i];a[i]:=t;由OIFans.cn收集
③ ;
t:=a[j]; ④ ;
end end; begin
writeln('Entry n,k (k<=n):'); read(n,k);
count:=0;
for i:=1 to n do a[i]:=i;
⑤ ;
end.
2.(TSP 问题的交叉算子)TSP 问题(Traveling Salesman Problem)描述如下:给定 n 个城 市,构成一个完全图,任何两城市之间都有一个代价(例如路程、旅费等),现要构造遍历所有城市的环 路,每个城市恰好经过一次,求使总代价达到最小的一条环路。

遗传算法是求解该问题的一个很有效的近似算法。在该算法中,一个个体为一条环路,其编码方法 之一是 1 到 n 这 n 个数字的一个排列,每个数字为一个城市的编号。例如当 n=5 时,“3 4 2 1 5” 表示该方案实施的路线为 3->4->2->1->5->3。遗传算法的核心是通过两个个体的交叉操作,产生两 个新的个体。下面的程序给出了最简单的一种交叉算法。具体过程如下:
(1)选定中间一段作为互换段,该段的起止下标为 t1,t2,随机生成 t1,t2 后,互换两段。
(2)互换后,在每个新的排列中可能有重复数字,因而不能作为新个体的编码,一般再做两步处理:
(2.1) 将两个互换段中,共同的数字标记为 0,表示已处理完。
(2.2) 将两个互换段中其余数字标记为 1,按顺序将互换段外重复的数字进行替换。 例如:n=12,两个个体分别是:
a1: 1 3 5 4 * 2 6 7 9 * 10 12 8 11
a2: 3 2 1 12 * 6 7 10 11 * 8 5 4 9
t1=5,t2=8。上述每一行中,两个星号间的部分为互换段。假定数组的下标从 1 开始,互换后有:
a1: 1 3 5 4 * 6 7 10 11 * 10 12 8 11
a2: 3 2 1 12 * 2 6 7 9 * 8 5 4 9
然后,将数字 6,7 对应的项标记为 0,星号内数字 2,9,10,11 对应的项标记为 1,并且按顺序对 应关系为:10<->2,11<->9。于是,将 a1[9]=10 替换为 a1[9]=2,将 a2[2]=2 替换为 a2[2]=10, 类似再做第 2 组替换。这样处理后,就得到了两个新个体:
a1: 1 3 5 4 6 7 10 11 2 12 8 9
a2: 3 10 1 12 2 6 7 9 8 5 4 11
(3)输出两个新个体的编码。 程序:
program ex502;
type arr1=array[1..20] of integer;
var a1,a2,kz1,kz2:arr1; n,k,t1,t2:integer;
function rand1(k:integer):integer;
var t:integer;
begin t:=0;
while (t<2) or(t>k) do t:=random(k+1)-2; rand1:=t;
end;
procere read1(var a:arr1;m:integer);
{读入数组元素 a[1]至 a[m],a[0]=0,略。}
procere wrt1(var a:arr1;m:integer);
{输出数组元素 a[1]至 a[m],略。}
procere cross(var a1,a2:arr1;t1, t2,n:integer);由OIFans.cn收集
var i,j,t,kj:integer; begin
for i:=t1 to t2 do begin
t:=a1[i]; ① ;
end;
for i:=1 to n do
if (i<t1)or(i>t2) then begin
kz1[i]:=-1;kz2[i]:=-1;
end else
begin ② ; end;
for i:=t1 to t2 do for j:=t1 to t2 do
if(a1[i]=a2[j]) then
begin ③ ; break; end;
for i:=t1 to t2 do if(kz1[i]=1) then begin
for j:=t1 to t2 do if(kz2[j]=1) then
begin kj:=j; break; end;
for j:=1 to n do if ④ then
begin a1[j]:=a2[kj];break; end;
for j:=1 to n do if ⑤ then
begin a2[j]:=a1[i]; break; end;
kz1[i]:=0;kz2[kj]:=0;
end; end; begin
writeln('input (n>5):');
readln(n);
writeln('input array 1:'); read1(a1,n);
writeln('input array 2:'); read1(a2,n);
t1:=rand1(n-1);
repeat
t2:=rand1(n-1); until(t1<>t2); if(t1>t2) then
begin k:=t1; t1:=t2; t2:=k; end;
⑥ ;
wrt1(a1,n); wrt1(a2,n);
end.