第一题
关于梅森素数。所谓梅森数,是指形如2^p-1的一类数,其中指数p是素数,常记为M(p)。如果p是素数的同时,梅森数(即2^p-1)也是素数,就称这个梅森数为梅森素数。输入一个长整型数n,输出不大于它的所有梅森素数。
例:输入:1000
输出:
M(2)=3
M(3)=7
M(5)=31
M(7)=127
分析:写一个判断一个数是不是素数的函数调用即可
#include<iostream> #include<cmath> using namespace std; bool judge(int n){ if(n==1)return false; for(int i=2;i<=sqrt(n);i++) { if(n%i==0)return false; } return true; } int main(){ int n; cin>>n; for(int i=2;pow(2,i)-1<=n;i++) { if(judge(i)){ if(judge(pow(2,i)-1)) { cout<<"M("<<i<<")="<<pow(2,i)-1<<endl; } } } return 0; }
第二题 文件操作题
将第一题的源代码保存为abc.c文件,并且要求abc.c文件中有相当数量的注释,包括//和/……/两种形式的注释
(1)读取abc文件的内容,将其显示在控制台上,并为每行代码增加一个符号。(10)
(2)使源代码中的//类型的注释内容不显示在控制台中。(10)
(3)使源代码中的/……/类型的注释内容不显示在控制台中。(10)
分析:这道题我遇我懵,确实是我的知识盲点,说实话华科的机试题目比较简单,但是如果遇到这样的题目就很容易凉,我会在下面单独开一篇文章学习这机试题。
文章衔接:https://blog.csdn.net/qq_36684096/article/details/105089904
第三题 字符串加密题
输入一串由字母组成的字符串,对于字符串中的每个字符,向后偏移2,例如a变成c,y变成a,z变成b,Z->B。
(1)输出加密后的字符串
(2)对于加密后的字符进行奇校验,即其ASCLL码转化成二进制数,在最高位加0或者1,使1的数目为奇数
例如:输入aD
输出:
原文:aD
密文:cF
c 11100011 227
F 01000110 70
分析:简单的字符串处理题目,第一问比较容易,第二问开一个8大小的数组处理记录数据
#include<iostream> #include<string> #include<algorithm> using namespace std; int a[8],b[8]={128,64,32,16,8,4,2,1}; int generateit(int n){ fill(a,a+8,0); int k=0,sum=0;//判断奇偶数 for(int i=7;n!=0;i--){ a[i]=n%2; if(n%2)k++; n=n/2; } if(k%2==0){ a[0]=1; } for(int i=0;i<8;i++){ cout<<a[i]; if(a[i])sum+=b[i];} return sum; } int main(){ string str,s; getline(cin,str); for(int i=0;i<str.size();i++){ if(str[i]=='y')s+='a'; else if(str[i]=='z')s+='b'; else if (str[i]=='Y')s+='A'; else if(str[i]=='Z')s+='B'; else s+=(str[i]+2); } for(int i=0;i<s.size();i++){ cout<<s[i]<<" "; int n=s[i]; int sum=generateit(n); cout<<" "<<sum<<endl; } return 0; }