2018年华科计算机学院机试题

简介: 2018年华科计算机学院机试题

从键盘输入一行英文句子,句子中只有英文单词和空格,每个单词之间由若干个空格隔开,

英文单词由大小写字母组成,编程完成下列任务:

(1)统计并输出此句子中英文字母的个数; (10 分)

(2)统计并输出此句子中单词的个数; (10 分)

(3)查找此句子中出现次数最多的字母(不区分大小写,大小写字母是相同的)和次数。当出现最多的字符不止一个时,都能找到,并输出找到的所有字母及次数。(输出字母时大小写均可) (20 分)

例如,输入句子:This is An Pencil Case

则输出为:

字母个数:18

单词个数:5

最多的字母:i,s

出现的次数:3

解:统计个数在遍历中进行,统计单词也在遍历中进行,最后统计次数采用hash的思想进行。

#include<iostream>
#include<string> 
using namespace std;
int hash[26]={0};//hash数组统计单词出现次数
int main(){
  string str;
  getline(cin,str);
  int letter=0,word=0,num=0;
  for(int i=0;i<str.size();i++){
    int k=str[i]-'a',m=str[i]-'A';
    if((0<=k&&k<=26)||(0<=m&&m<=26)){
      if(i==0||str[i-1]==' '){ //判断是否是单词开始 
        letter++;
        word++;
      }
         else letter++;
         if(0<=k&&k<=26){  //统计次数,更新最大次数 
       hash[k]++;
       if(num<hash[k])
       num=hash[k];
       }
         else {
           hash[m]++;
       if(num<hash[m])
       num=hash[m];
       }
    } 
  }
  cout<<"字母个数:"<<letter<<endl;
  cout<<"单词个数:" <<word<<endl; 
  cout<<"最多的字母:"; 
  for(int i=0;i<26;i++)
  if(hash[i]==num){
  char c=i+'a' ;
  cout<<c<<" ";
        }
    cout<<endl;
    cout<<"出现的次数:"<<num<<endl; 
  return 0;
} 

运行结果

1685017473331.jpg

十二进制是数学中一种以 12 为底数的计数系统,它由 0~9,a,b 组成,与十进制的队友关系是:0~9 对应 0~9,a 对应 10,b 对应 11。例如,十二进制的 a2,十进制是 122。输入一个仅含十二进制数字的字符串(字母一律小写,不超过 8 个字符),完成下列任务:

(1)输出该十二进制数每一位对应的十进制数(从高位到低位顺序输出,空格隔开);

(2)实现“十二进制”转“十进制”算法,输出该十二进制数对应的十进制数;

(3)输出转换后的十进制数在内存中的每个二进制位(共 4 字节,每字节之间空格隔开)。

例如,输入十二进制数:a2

则输出为:

10 2

122

00000000 00000000 00000000 01111010

思路:前两个问题简单,最后一个问题可以建立起一个空间为32的数组存储10进制转换为2进制的数字。

using namespace std;
int num[8];//存储每个字符对应12进制大小
int a[33]={0};//存储二进制数
int main(){
  string str;
  getline(cin,str);
  for(int i=0;i<str.size();i++) //将字符转化为对应大小 
  {
    if(str[i]=='a')num[i]=10;
    else if(str[i]=='b')num[i]=11;
    else num[i]=str[i]-'0';
  }
  int sum=0;
  for(int i=0;i<str.size();i++){ //1,2 问 
    sum=sum*12+num[i];
    cout<<num[i]<<" ";
  }
  cout<<endl<<sum<<endl;
  int k;
  for(int i=32;sum>0;i--){ //二进制转化 
    a[i]=sum%2;
    sum=sum/2;
  }
  for(int i=1;i<=32;i++)
  {
    cout<<a[i] ;
    if(i%8==0)cout<<" ";
  } 
  cout<<endl;
  return 0; 
} 

运行结果:

1685017504434.jpg

1685017513577.jpg

题目如上所述。

这里复杂在小数部分的处理,如何处理判断循环节,我们需要手动模拟 除法求小数的过程。这里利用map来标记循环节出现的位置。

#include<iostream>
#include<map>
using namespace std;
int a[101];//用来储存小数部分 
map<int,int>b;// 用来标识循环节和起始位置 
void generatep(int n,int d)
{
  b.clear();
int k=n/d,tag=1;//保存整数部分
int mod=n%d;//小数部分 
int s=0,e;//记录循环节起始位置 
for(int i=0;mod;i++) 
{   
  mod=mod*10; 
  if(b[mod]){ //起始位置需要手动判断 因为key值不存在返回0 
  tag=0;
  s=b[mod];
  break;
  }
  if(mod/d==a[0]) {//判断循环节是否在开始位置
    s=0;
    tag=0;
    break;
  }
  a[i]=mod/d;
  b[mod]=i;
  mod=mod%d;
  e=i;
} 
if(!tag){
  cout<<k<<".";
  for(int i=0;i<s;i++)
  cout<<a[i];
  cout<<"(";
  for(int i=s;i<=e;i++)
  cout<<a[i];
  cout<<")"<<endl;
}
else {
  cout<<k<<".";
  for(int i=0;i<=e;i++)
  cout<<a[i];
  cout<<endl;
}
} 
int main(){
  int n,d;
  for(int i=0;i<3;i++)
  {
    scanf("%d/%d",&n,&d);
    generatep(n,d);
  }
}

1685017539282.jpg

这里指得注意的是map的返回值,在这里困了差不多半个小时。

相关文章
|
算法
孜孜不倦,上下求索——悼念原复旦大学计算机学院朱洪教授
上海交通大学软件学院副教授李停舟发微博称,原复旦大学计算机系教授朱洪1月27日逝世。朱洪教授是我国知名算法理论专家,也是复旦大学计算机科学技术学院40多年发展的亲历者和建设者。本文将朱洪教授在复旦工作的经历进行编辑,以念逝者。
3630 0
|
数据安全/隐私保护
计算机四级网络工程师等级考试题库软件---百度云分享
做件好事,考四级的兄弟们一起共勉~~~ 链接:https://pan.baidu.com/s/1im4BDVZofZbT9f5PZtsxdA 密码:9i5h ​ ​支持一下呗
2374 0
华科2017年计算机学院机试题(c++)
华科2017年计算机学院机试题(c++)
|
数据安全/隐私保护
2019年华科834计算机机试题
2019年华科834计算机机试题
华科834计算机2016年机试题
华科834计算机2016年机试题
江苏大学 数字逻辑电路设计/数字电路 期末/考研 复习题
江苏大学 数字逻辑电路设计/数字电路 期末/考研 复习题
255 0
江苏大学 数字逻辑电路设计/数字电路 期末/考研 复习题
|
机器学习/深度学习 人工智能 移动开发
弹指间计算机协会 2021“千里码”程序设计竞赛 题面
弹指间计算机协会 2021“千里码”程序设计竞赛 题面
121 0
弹指间计算机协会 2021“千里码”程序设计竞赛 题面
2015-第六届蓝桥杯大赛个人赛(软件类)真题C 大学B组
2015-第六届蓝桥杯大赛个人赛(软件类)真题C 大学B组
下一篇
无影云桌面