第3章 数组和字符串

3.1  数组

1.在算法竞赛中,常常难以精确计算出需要的数组大小,数组一般会声明得稍大一些。在空间够用的前提下,浪费一点是不会有太大影响。

2.比较大的数组应尽量声明在main函数外,否则程序可能无法运行。

3.整型数组a复制k个元素到数组b,memcpy(b,a,sizeof(int)*k。

  • 浮点型数组复制,memcpy(b,a,sizeof(double)*k)。
  • 需包含头文件string.h。
  • 全部复制,memcpy(b,a,sizeof(a))

4.开灯问题

  • memset(a,0,sizeof(a))的作用是把数组a清零,在string.h中定义
  • 练习

5.蛇形填数

  • 四个方向遍历的代码
  • 潜在bug,如果越界,x+1会等于n,但由于短路不会造成后面a[x+1][y]访问非法内存。
  • 练习

3.2 字符数组

1.竖式问题

    找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合,输出所有竖式。每个竖式前都应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但所写程序中应该输出空格,而非小数点)。

样例输入:

2357

样例输出:

<1>

..775

X..33

------

25575

  • scanf("%s",s),读入字符串
  • printf输出到屏幕,fprintf输出到文件,而sprintf输出到字符串
  • strlen(s),获取字符串s的实际长度
  • strcpy(a,b),赋值。strcmp(a,b),比较。strcat(a,b),连接。
  • 滥用++、--、+=等可以修改变量值的运算,建议每条语句最多只有一次这种运算符,并且所修改的变量在整条语句中只出现一次。

3.3 竞赛题目选讲

例3-1 TeX中的引号

  • scanf("%s")输入字符串,碰到空格或者TAB就会停下来。
  • fgetc(fin),读取一个打开的文件fin,读取一个字符,然后返回一个int值。
  • fgets(buf, maxn, fin) ,读取完整的一行放在字符数组buf中。

例3-2 WERTYU

 

posted @ 2017-11-21 22:33  RunningYY  阅读(149)  评论(0编辑  收藏  举报