单项选择

题目答案:

C

题目解析:

摩尔 定律是由英特尔创始人之一戈登·摩尔提出来的。其内容为:当价格不变时,集成电路上可容纳的元器件的数目,约每隔 18-24 个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔 18-24 个月翻一倍以上。这一定律揭示了信息技术进步的速度。


题目答案:

C

题目解析:

只有当该二叉树为完全二叉树时,深度最小。完全二叉树的深度为  


题目答案:

C

题目解析:

,所以4位二进制可以写成1位十六进制。

100位二进制可以写成100/4=25位十六进制


问题求解

题目答案:

3

题目解析:

1.删除 'A'

2.将 'C' 改成 'A'

3.将 'F' 改成 'C'

所以编辑距离为 3


阅读程序

#include <iostream>
using namespace std;
int solve(int n, int m){Preferencesint 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;cin>>n>>m;cout<<solve(n, m)<<endl;return 0;
}

输入:7 4

输出:_____

题目答案:

20

题目解析:

模拟递归调用过程,记忆每次搜索结果。

如果将 n 看作行,m 视为列,那么 solve(n,m) 求的是前n − 1行、第m − 1列所有数的和:


完善程序

#include <iostream>
#include <string>
using namespace std;
const int SIZE = 200;
struct hugeint {int len, num[SIZE];
};
//其中 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;elseans.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;elseans.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;
}
bool over(hugeint a, hugeint b){
//若大整数 a>b 则返回 true,否则返回 falseint i;if (⑥) return false;if (a.len > b.len) return true;for (i = a.len; i >= 1; i--) {if (a.num[i] < b.num[i])return false;if (a.num[i] > b.num[i]) return true;}return false;
}
int main(){string s;int i;hugeint target, left, middle, right;cin>>s;memset(target.num, 0, sizeof(target.num));target.len = s.length();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(⑧))right = middle;else left = middle;} while (!over(plustwo(left), right));for (i = left.len; i >= 1; i--)cout<<left.num[i];cout<<endl;return 0;
}

题目答案:

填空位置 ①:ans.num[i + j - 1]

填空位置 ②:ans.num[i] %= 10

填空位置 ③:a.num[i] + b.num[i]

填空位置 ④:ans.num[i] % 2

填空位置 ⑤:ans.len++

填空位置 ⑥:a.len < b.len

填空位置 ⑦:'0'

填空位置 ⑧:times(middle, middle), target

题目解析:

本题为二分 + 高精度

然后看各个函数过程的功能。可以知道 add 就是加,然后就可以很快得出 ③,注意之前有进位,它还要加上它自己。

既然这一模块唯一的空已经很快填好了,就可以不看这块了,知道这是个 a+b 的函数就行了。接下来看到 average,average 就是平均,看主过程,middle=average(left,right);这是求 a 和 b 的平均值,里面有个 ④,可以轻松看出 ④ 所在的循环是 ans 已经等于 a+b 了,现在正在除以 2。模拟笔算用的竖式除法,可以知道 ④ 这个地方是退位,就用 ans.num[i] %2就行了。

然后看到 plustwo,plustwo 的意思就是“加二”,这里面只有一个空,是 ⑤。不用看上面,只看 ⑤ 所在的 if 语句,就知道这里应该是对 ans.len 的修正,应该填ans.len++

再看到 over,在主程序里知道这是个二分用的判断函数。看到 over 中的if(a.len>b.len)这段,得知如果 a 比 b 长,也就是 a 比 b 大,那 over 就为真。看来这个 over 就是个比大小的函数,a>b 为真,a<b 为假。 ⑥ 所在的地方与下面类似,所以写上a.len<b.len

还有一个函数没看到,那就是 times,times 就是乘法,这是 a * b 的高精度乘法函数,从而可以轻易写出 ① 和 ② 。

最后主程序还有两个空,第一个空 ⑦ 是字符转数字,较简单;第二个空是在 over() 里面,而且可以发现,整个程序都没用到 times,肯定是这里用了。最后联系上下文,得出这里是 times(middle,middle),target,比较 middle 的平方与 target。


NOIP 2011 年普及组初赛试题整理相关推荐

  1. NOIP 2010 年普及组初赛试题整理

    单项选择 问题求解    阅读程序 #include<iostream> using namespace std; int rSum(int j) {int sum=0;while(j!= ...

  2. NOIP 2011 普及组初赛试题——答案、分析、错题记录

    NOIP 2011 普及组初赛试题 单项选择题-答案 第 1 题 在二进制下,1011001 + ( ) = 1100110. A. 1011 B. 1101 C. 1010 D. 1111 第 2 ...

  3. noi2017初赛c语言试题,NOIP2017普及组初赛试题及答案

    原标题:NOIP2017普及组初赛试题及答案 清北学堂信息学金牌教研团今天为学生们整理了NOIP2017普及组初赛试题及答案,供学生们参考哦! --此文2100多文字,大概需要60分钟看完 一.单项选 ...

  4. 2007年noip普及组初赛试题

    一. 单项选择题(共20题,每题1.5分,共计30分.每题有且仅有一个正确答案.) 1. 在以下各项中,( )不是CPU的组成部分. A.控制器 B.运算器 C.寄存器 D.主板 2.在关系数据库中, ...

  5. NOIP2017普及组初赛试题及答案

    普及组C++语言试题 一.单项选择题(共 20 题,每题 1.5 分,共计 30 分:每题有且仅有一个正确选项) 1.在 8 位二进制补码中,10101011 表示的数是十进制下的( ). A. 43 ...

  6. NOIP 2007 普及组初赛试题(C++)(无答案)

    含答案试题https://blog.csdn.net/fuzhenkun/article/details/104498640 第 1 题 在以下各项中,( )不是CPU的组成部分 A. 控制器 B. ...

  7. NOIP 2007 普及组初赛试题(C++)(含答案)

    无答案试题https://blog.csdn.net/fuzhenkun/article/details/104499295 第 1 题 在以下各项中,( )不是CPU的组成部分 A. 控制器 B. ...

  8. NOIP 2008 普及组初赛试题 解题报告、题解及选择题思路,高质量

    做题:https://ti.luogu.com.cn/problemset/1003 选择题 第 1 题 微型计算机中,控制器的基本功能是( A). A. 控制机器各个部件协调工作 B. 实现算术运算 ...

  9. NOIP 2013 普及组初赛试题

    第 1 题 一个 32 位整型变量占用(A)个字节. A. 4 B. 8 C. 32 D. 128 常识题,每个32 位整型变量占4个字节 第 2 题 二进制数 11.01 在十进制下是(A). A. ...

最新文章

  1. 使用 USB 设备安装 Windows 10虚拟机
  2. 全球最大的公开人脸数据集 | 清华大学芯翌科技联合发布
  3. javascript宿主对象之window.history
  4. redis3.2.3安装部署实战
  5. *30.什么是微内核
  6. 004_SpringMVC分层配置文件
  7. 处理get中的中文乱码情况
  8. 最新 Spring 系列教程,都在这了
  9. 业界对物联网技术最常见的三大误区解读
  10. 关于java的关键字 transient
  11. 转:大规模网站架构技术原理透析
  12. FPGA入门基础介绍
  13. 使用IntelliJ IDEA 构建Maven的web项目
  14. java读取百万条记录出错_如何实现导出百万条数据到EXCEL中不报OOM异常?
  15. 探索哪个进程使磁盘I/O升高
  16. 一度智信:分析拼多多人群定位
  17. 【Vue 问题】文件流导出为excel无法打开
  18. 测绘——如何在win10环境下安装CAD2006+CASS7.0
  19. 【C++】操作符重载
  20. 【项目】数仓项目(三)

热门文章

  1. 2020 年 TensorFlow 开发者峰会总结
  2. 必应词典桌面版 --- 基于大学生用户群体的软件评测与分析(与有道词典对比版 1功能篇)...
  3. Mysql出现问题:ERROR 1116 (HY000 (ER_TOO_MANY_TABLES)): Too many tables; MySQL can only use %d tabl解决方案
  4. html5卷轴动画制作,几种逼真卷轴动画的制作方法
  5. 不能定义声明dllimport_在 C++ 类中使用 dllimport 和 dllexport
  6. 15.federation
  7. cupy 安装时提示报错 Exception: Your CUDA environment is invalid.
  8. Bootloader详解,理解Bootloader看这篇就够了
  9. 科学家发现“超级原子” 元素周期表要扩大(图)
  10. Ideal比较好用、常用的快捷键