2018北邮计算机院机试(回忆版)
Problem A
题目:
输入数据0-2的32次方范围,化成二进制,然后逆序这个二进制序列,转换成十进制。
测试数据:
2
输出:
1
测试数据:
10
输出:
5
这道是简单题,就是模拟手工计算二进制过程,而且给的输入范围不大,2^32=4 294 967 296,故int的范围刚好够,但是为了以防万一,我这里直接用long long int省心省力。
#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;
int main(){
long long int a;
scanf("%lld",&a);
int buf[33];
int i=0;
while(a!=0){
buf[i++]=a%2;//手工计算的过程原本要逆置才能得到正确的二进制,但是题目求得就是二进制逆置,故直接得出的数组就是逆置完事的了。
a/=2;
}
long long int ans=0;
i--;
for(int j=0;i>=0;j++){
if(buf[i]!=0){
ans+=pow(2,j);
}
i--;
}
printf("%lld\n",ans);
return 0;
}
PS:题目里没说要循环,也没有说多组测试数据,并且题目给的测试用例中,两个输出输入,故不加循环了。。。
(有错的话请大佬指正。。。菜鸡一枚)
Problem B
题目:输出图象数字(差不多是这种类型的题,可能输入格式不太对,因为没有原题)
输入:
0-9任意一个数字
输出:
输出对应的5*3的图像数字。
测试数据:
2
输出:
111
001
111
100
111
直接暴力ctrl c+v。。。。提前写好图
#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;
void shuchu(int buf[5][3]){
for(int i=0;i<5;i++){
for(int j=0;j<3;j++){
printf("%d",buf[i][j]);
if(j==2)
printf("\n");
}
}
}
int main(){
int n;
scanf("%d",&n);
int buf0[5][3]={1,1,1,1,0,1,1,0,1,1,0,1,1,1,1};
int buf1[5][3]={0,1,0,0,1,0,0,1,0,0,1,0,0,1,0};
int buf2[5][3]={1,1,1,0,0,1,1,1,1,1,0,0,1,1,1};
int buf3[5][3]={1,1,1,0,0,1,1,1,1,0,0,1,1,1,1};
int buf4[5][3]={1,0,1,1,0,1,1,1,1,0,0,1,0,0,1};
int buf5[5][3]={1,1,1,1,0,0,1,1,1,0,0,1,1,1,1};
int buf6[5][3]={1,1,1,1,0,0,1,1,1,1,0,1,1,1,1};
int buf7[5][3]={1,1,1,0,0,1,0,0,1,0,0,1,0,0,1};
int buf8[5][3]={1,1,1,1,0,1,1,1,1,1,0,1,1,1,1};
int buf9[5][3]={1,1,1,1,0,1,1,1,1,0,0,1,1,1,1};
switch(n){
case 0:shuchu(buf0);break;
case 1:shuchu(buf1);break;
case 2:shuchu(buf2);break;
case 3:shuchu(buf3);break;
case 4:shuchu(buf4);break;
case 5:shuchu(buf5);break;
case 6:shuchu(buf6);break;
case 7:shuchu(buf7);break;
case 8:shuchu(buf8);break;
case 9:shuchu(buf9);break;
default:return 0;
}
return 0;
}
最后两道没a出来,,,比较菜。。