目录
空间
【竞赛习题|蓝桥杯第十二届个人省赛C/C++B组(欢迎大家在底部评论留下自己疑问)】?
卡片
空间
文章图片
对于本题首先要知道计算机储存容量问题
容量问题小结:
容量的单位按由小到大分为b,B,KB,MB,GB,TB...
其间全是用1024进制的,也即是2的10次方.
b是位的英文缩写即(bit)B是字节的英文缩写即(Byte)
单位换算
1B=8b
1 KB=1024 B
1 MB= 1024 * 1024 B
1 GB=1024 MB=1024 * 1024 KB=1024 * 1024 * 1024 B
解题: 先将MB换算为b 即 256*1024*1024*8=2147483648 b
再除以32 2147483648/32=67108864
即答案为 67108864
用代码解题:即计算数据左移还是右移 乘以1024为左移10为即扩大;除法1024为右移10位缩写
位运算符:<< >> ~ | ^ &
代码如下:
/*左移运算符“<<”是双目运算符。左移n位就是乘以2的n次方。
其功能把“<<”左边的运算数的各二进位全部左移若干位,
由“<<”右边的数指定移动的位数,高位丢弃,低位补0。
例: a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),
左移4位后为00110000(十进制48)。*/
#include
int main()
{
printf("%d\n",256<<18);
return 0;
}
提示:在进行位运算时候变量最好定义为无符号类型,因为由于有符号第一位是符号位,而各个平台上的位操作符对符号位的处理可能各不相同,因此最好使用无符号类型进行运算。此外,我们可以通过对整型类型的选择来控制位的个数,这在一些情况下是非常有用的。
卡片
文章图片
答案:3181代码如下:(直接暴力破解)
解题思路:用循环从1开始遍历到最大组成的数,然后对遍历的每一个数,求出组成它的卡片,然后减去相应的卡片数量;如1231是由两个1、一个2、一个3组成,那么相应卡片一要减去2、卡片2要减去一、卡片三要减去一;
用编程解决时候要注意循环结束条件,当某一卡片的数量变为负值时候就结束循环。
#include
#include
int main()
{
int a[10];
int i,j;
int k;
int c;
int n;
int flag=0;
/*用数组下标代替卡牌数字,
再标记有多少张卡牌*/
for (i=0;
i<10;
i++)
a[i]=2021;
k=1;
while(1)
{c=k;
while(c)//此循环为取每个数字由哪几张卡牌组成
{
n=c%10;
a[n]--;
//取出后相应卡牌数量减一 if(a[n]<0)//防止卡牌数量减为负数
{
flag=1;
break;
}
c/=10;
}/*当某一卡片的数量小于零时,输出*/
if(flag)
{
printf("%d\n",k-1);
exit(0);
}k++;
}
return 0;
}
推荐阅读
- 蓝桥杯|2018年蓝桥杯省赛 C++ B组
- 算法|高德POI数据生产中的计算机视觉技术
- 广告|预训练技术在美团到店搜索广告中的应用
- Pytorch|Pytorch中的torch.gather函数详解,从抽象到具体
- 算法|基于pytorch手动实现softmax回归
- JavaEE|【Java 多线程】多线程带来的的风险-线程安全、多线程五个经典案例
- 浅谈Genetic Algorithm
- 算法练习|2022年蓝桥杯(第十三届蓝桥杯大赛软件赛省赛C/C++大学B组真题(考后回顾))
- 题解|2022年第十三届蓝桥杯省赛C/C++B组个人题解