- 序
- 试题 A:空间
- 解题思路
- 题解
- 试题 B:卡片
- 解题思路
- 题解
本来计划好的各种复习方案,却因为种种原因没有执行,不找借口,就是不想学
阶段性心理活动状态:
- 看了看真题,哇!好难,还是先做基础题吧……
- 查了一堆资料、找了各种资源,满满收藏,一个没看……
- 搜集经验贴,错把经验当宝剑……
- 想着时间还很长,一再推迟,今日事,明日毕!结果到火烧眉毛也没看……
直到今天下载了准考证,才知道事情的严重性!!!但,好歹努个力吧,至少不能轻言放弃
想想 300 块大洋的报名费,用来干什么不香,不能打水漂。
突击训练搞起来,肝算法,刷题~冲冲冲,恶补 +1 +1
试题 A:空间 解题思路计算机基础知识,主要考察不同数据存储单位之间的转换
题解需要知道如下单位转换关系
1 mb = 1024 kb = 1024 * 1024 b ; 1 byte(字节) = 8 bit(位)
那么,256 mb 的内存共有 256 * 1024 * 1024 * 8 bit,所以,共能存放 (256 * 1024 * 1024 * 8)÷ 32 = 67108864 个 32 位二进制整数
计算的话可以用计算器,或者代码。
当然,你也可以选择手工计算,但我觉得你应该不至于这么做
/*
* @Author: coder-jason
* @Date: 2022-04-04 19:29:06
* @LastEditTime: 2022-04-04 19:31:17
*/
#include
using namespace std;
int main()
{
// cout << (256 * 1024 * 1024 * 8) / 32 << endl; 运算结果超出 int 范围
cout << 256 * 1024 * 1024 / 4 << endl;
return 0;
}
试题 B:卡片
解题思路
首先,数字 0~9,每个数字又有 2021 个,显然需要存放于数组中,每次拼凑数字用掉一张卡片,对应卡片数量减一。
等到某个数字卡片数量中出现剩余 0 张的情况,则无法继续拼凑
事实上,题目举例显而易见,拼出数字 1~9 时,只剩下 1 张卡片 1 ,无法继续拼出数字 11 。
实际情况中,数字 1 也是使用最多的,也就是用的最快,最先没有剩余的
其中,在数组判断哪个数字减一时涉及到数位截取的知识点
题解名字高深,实质很简单:用
/
和%
提取出组合数据中的数字,eg:截取数字 206 中的 6,206 % 10 即可
/*
* @Author: coder-jason
* @Date: 2022-04-04 19:32:45
* @LastEditTime: 2022-04-04 20:39:46
*/
#include
using namespace std;
int array[10]; //数字 0~9 共 10 个数字
bool piece(int num)
{ // 尝试拼出数字 num,成功返回 true,失败返回 false
while (num)
{
array[num % 10]--; // 使用了数字num,使用 % 剥离数字,数字对应个数减一
if (array[num % 10] < 0) // 如果对应的数字剩余个数小于 0,说明该数字已经用尽,返回 false
return false;
num /= 10; // 数字 1 和 10,均使用数字 1,故 / 10后商为 1,数字 1 的个数需要再次减一
}
return true;
}
int main()
{
int count = 0; //计数器,每次拼完一个数字,自增 1
for (int i = 0; i < 10; i++)
{
array[i] = 2021; // 数组中每个元素都赋值为 2021,代表数字 0~9的个数
}
for (int i = 1;; i++)
{
if (piece(i))
{ // 从数字1开始拼,每拼完一个数字,计数器自增 1
count++;
}
else
break;
}
cout << count << endl;
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)