试题A:
思路:考计算机基础知识
bit:位,又名比特,缩写是b,是计算机中最小的数据单位,其实就是0,1这样的二进制位
Byte:字节,缩写是B,是计算机文件大小的基本计算单位,一个字符是1Byte,如果是汉字,则是2Byte
1Byte=8bit
1Byte=8bit(1B=8b) 1个字节=8位,即一个字节由8个二进制位构成
1KB=1024Byte
1MB=1024KB
1GB=1024MB
1TB=1024GB
所以本题:
1个32位二进制数占4个字节
25610241024/4=67108864
答案:67108864
试题B:卡片
思路:签到题,用一个数组去存0-9的卡片,然后从1开始暴力枚举每一个数,拆分出每一位x,对应的数组中x的个数减一,如果这个数对应的卡片数量用完了,那么就不能再继续拼下去了
#include<bits/stdc++.h>
using namespace std;
int a[10];
int ans=0;
int check(int n)
{
while(n>0)
{
int x=n%10;
a[x]--;
n/=10;
if(a[x]==0)
{
return 0;
}
}
return 1;
}
int main()
{
for(int i=0;i<=9;i++)
{
a[i]=2021;
}
for(int i=1;;i++)
{
int flag=check(i);
if(flag==0)
{
ans=i;
break;
}
}
cout<<ans<<endl;
}
答案:3181
试题C 直线
这个题要特别注意map容器的用法,这里的键是一个数对
思路:先4重循环枚举可以组成的点的所有斜率k和截距b,其中注意类型转换,其中截距b的计算不能通过k直接求出,要通过两个点的坐标得出,减少误差,为了避免除数为0的情况,如果两个点的横坐标一样,要单独计算,所以最后的答案要加20,利用map容器去标记,然后统计即可
#include<iostream>
#include<map>
using namespace std;
map<pair<double, double>, int> mapp;
int main() {
int ans = 0;
for (int i = 0; i <= 19; i++) {
//枚举第一个点的横坐标
for (int j = 0; j <= 20; j++) {
//枚举第一个点的纵坐标
for (int k = 0; k <= 19; k++) {
//枚举第一个点的横坐标
for (int h = 0; h <= 20; h++) {
//枚举第一个点的纵坐标
double i1 = i;//类型转换
double j1 = j;
double k1 = k;
double h1 = h;