初赛笔记(持续更新)

某些图创作时代已经很久远了,见谅

基础知识

  1. 与(&)
    1&1=1
    1&0=0
    0&1=0
    0&0=0

eg: 25&13
25=(11001)2(11001)_2
13=(01101)2(01101)_2

    11001\ \ \ \ 11001

& 01101\& \ 01101

------------------
    01001\ \ \ \ 01001

  1. 或(|)

1|1=1
1|0=1
0|1=1
0|0=0

两边都是0,结果就是0,否则结果就是1

  1. 按位异或(xor,^)

一位二进制数字进行按位或操作的结果

1^1=0
0^0=0
1^0=1
0^1=1
两个数相同xor结果为0,不同为1

4. 按位取反

  1. 左移

  2. 右移

第一台计算机是EINAC

原码,反码,补码:

(皆为二进制)

原码:

一个数X的原码表示为:

符号位用0表示正,用1表示负。

数值部分为X的绝对值的二进制形式

反码:

若X为正数,反码=原码,若X为负数,则在原码的基础上符号位保持不变,数值位各位去反

补码:

如果X是负数,则在原码的基础上符号位依然保持不变,数值位取反+1

如果是正数,原码=补码=反码

计算机软件保护法是用来保护计算机软件的著作权

Turing 英国人 计算机科学之父

Ada Lovelace 是第一个写程序的人

计算机数学模型是Turing提出的

IT是指信息技术

巨型机:超级计算机,运算快,容量大,主要用于顶尖科研领域

大、中型机:国家级科研机构、中点院校使用。

小型机:一般科研机构、学校使用

微型机:家用计算机(PC机、个人计算机)运用最为广泛,70年代之后开始普及。

微机内存储器的地址是以字长编址的

1B=8bit

绘图仪是输出设备

RAM是读写存储器

ROM是只读存储器

cache是高速缓冲

计算机主机是由CPU+内存储器构成的

存取速度:

寄存器>高速缓存>内存>外存

既是输入设别又是输出设备的是触摸屏

数字化仪是输出设备

微机缺了光驱也可正常运行

液晶显示器不具有计算功能

断电后ROM/硬盘可以保存数据

.com是商业组织

.gov是政府

.edu是教育机构

IP地址

A类:第一个字段的范围是1~126

B类:第一个字段的范围是128~191

C类:第一个字段的范围是192~223

IP地址每段最大不超过255

………………

与运算:两个条件都成立才返回true,否则返回false

或运算:其中有一个条件成立就返回true,否则返回false

非运算:取反,例如!1=0

汉字是象形文字,常见的汉字有60006000多个,一级汉字37553755字,二级汉字30083008字,一级汉字是通过字典序排序的,二级汉字是通过偏旁部首排序的。

为什么要扯这些东西(

参考资料

数据结构

{

先进先出

有以下几个基本操作:

入栈

出栈

求大小

}

队列

{

先进后出,类似排队

头和尾皆可操作

}

链表

{

分为单向链表 双向链表 和 循环链表

单向链表就是一个元素:

双向链表就是一个元素一个地址,地址指向下一个元素的地址

插入删除不需要移动元素,也不需要事先估计存储空间

注意:链表不可以随机访问任意一个元素!

}

{

题外话:其实autodraw也可以当做图床(

好像还比gitee快(

结点度指的是儿子的数量

树的度指的是最大结点度

二叉树:

  1. 完全二叉树,前面都是满的而后面可以空
  2. 满二叉树:
    每个节点都有两个儿子。

例:

前序遍历:先遍历根,然后遍历左子树,在遍历右子树。

中序遍历:先遍历左子树,然后遍历根,在遍历右子树。

后序遍历:先遍历左子树,然后遍历右子树,最后遍历根。

}

阅读&完善程序

方法1 模拟:

例题:

#incldue<iostream>
using namespace std;
int main(){
		int i,a,b,c,d,f[5];
    	for(int i=0;i<4;i++) cin>>f[i];
    	a=f[0]+f[1]+f[2]+f[3];
    	b=f[0]+f[2]+f[3];
      	a=a/f[0],b/=a;
      	c=(b*f[1]+a)/f[2];
        d=f[(b/c)%4];
        if(f[(a+b+c+d)%4]>f[2]) cout<<a+b;
        else cout<<c+d;

}

就是把a,b,c,d求出来,算一算,最后时间充裕的话在验证一下,就行了。

  1. 书P90 第1题

程序输入输出非常简单

处理:

maxx=a[1];s=a[1];
for(int i=2;i<=10;++i){
  if(s<0) s=0;//联系上下可知,去掉s<0的数列的和的值,并让其值为0
  s=s+a[i];
  if(s>maxx) maxx=s;//保留最大的连续序列和
}

根据阅读,不难知道这是一个简单的利用累加算法求最大的连续序列和的问题,所以,可以直接计算或找出输入中的最大连续数列和。

  1. 书P90 第2题

本题为函数题,需要明白函数的作用。

分析:

已知n=10;

int co(int i1){
  int j1,s1;
  s1=n;//即s1=10;
  for(int j1=n-1;j1>=n-i1+1;--j1)
  s1=(s1*j1)/(n-j1+1);
  return s1;
}

主函数

int s=n+1;//即s=11;
for(int i=2;i<=n;++i) s=s+co(i);

3.书P91 第3题

此题为递归函数题

因为递归需要递和归两步,所以我们可以直接由边界来递推求解

fun(9)

inline int fun(int x){
  if(x==0||x==1) return 3;
  else return x-fun(x-2);
}

列表即可

fun(0)= fun(1)=3;

fun(6)=6-fun(6-2)=1;

fun(2)=2-fun(2-2)=-1;

fun(7)=7-fun(7-2)=2;

fun(3)=3-fun(3-2)=0;

fun(8)=8-fun(8-2)=7;

fun(4)=4-fun(4-2)=5;

fun(9)=9-fun(9-2)=7;

fun(5)=5-fun(5-2)=5;

4.书P91 第4题

此题为特殊的函数题,递归函数中又有不断调用。这是经典的阿克曼(Ackermann)函数,是非原始递归函数的例子。它需要两个自然数作为输入值,输出一个自然数。(它的输出值增长速度非常高,对于(4,3)的输出已大得不能准确计算。) 求ack(3,4)。

int ack(int m,int n){
  if(m==0) return n+1;
  else if(n==0) return ack(m-1,1);
  else return ack(m-1,ack(m,n-1));
}


大概就是列这个奇怪的表格(

参考资料:

汉字国际标码(GB2312-80)把汉字分为2个等级其中一级常用汉字的排列顺序是按什么排列的

普及组初赛通过指南

信息学奥赛一本坑(

赞赏