描述

小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。

这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译;如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译。

假设内存中有M个单元,每单元能存放一个单词和译义。每当软件将一个新单词存入内存前,如果当前内存中已存入的单词数不超过M−1,软件会将新单词存入一个未使用的内存单元;若内存中已存入M 个单词,软件会清空最早进入内存的那个单词,腾出单元来,存放新单词。

假设一篇英语文章的长度为N个单词。给定这篇待译文章,翻译软件需要去外存查找多少次词典?假设在翻译开始前,内存中没有任何单词

格式

输入格式

共2行。每行中两个数之间用一个空格隔开。第一行为两个正整数M和N,代表内存容量和文章的长度。第二行为N个非负整数,按照文章的顺序,每个数(大小不超过1000)代表一个英文单词。文章中两个单词是同一个单词,当且仅当它们对应的非负整数相同。

输出格式

共1行,包含一个整数,为软件需要查词典的次数

这个题目有3种情况

1,内存量少于输入的数量,这个是最开始看见题目时就想到的情况

2,内存量大于输入的数量,这里就要注意判断内存中是否存在的方式了,我使用的是布尔判断,之前使用的是遍历的时候如果没有就使cent++,然后判断cent==m,这样内存量大于输入的数量的时候就cent和m一直不相等就一直不能给内存赋值

3,还有一个比较巧妙的情况是输入的数有0,但是定义数组了之后没有赋值就默认是0就少了一次

#include<stdio.h>
int main(){int m,n,cent=0,k=0,sum=0;  //m,n分别为内存和输入数的数量,cent用于判断内存中是否存在,k用于判断内存是否满了,sum用于记录查字典的次数 scanf("%d%d",&m,&n);  //a用于存放输入的数,b用于存放内存 int a[n],b[m];for(int i=0;i<m;i++){b[i]=-1;  //先全部设为-1,避免因为不赋值而导致b中全为0,而输入的数可能也为0,影响判断}for(int i=0;i<n;i++){scanf("%d",&a[i]); //输入数 for(int j=0;j<m;j++){  //查找内存中是否存在if(a[i]==b[j]){cent=0;  //如果存在使cent为0不进入ifbreak;  //break跳出循环,表示已经找到,不用再循环,避免浪费时间}else{cent=1;  //没找到就cent=1,整个for循环表示只要找到就跳出,循环到内存的最后一个即b[m]也没找到cent就=1}}if(cent==1){  //内存中没找到则将数赋值进bsum++;  //sum计数,表示查找字典的次数,即最后输出的数if(k==m){  //先判断内存是否满了,满了就从第一个开始再一个一个替换到m个k=0;  //b[0]表示第一个 }b[k]=a[i];  //把没找到的数赋值到内存中即b中k++;  //k++,下一次没找到就赋值到b的下一个数中 cent=0;  //cent=0,开始下一次在内存中遍历找是否已经有了}}printf("%d",sum);
}

希望对大家有所帮助,有问题的话可以直接在评论区询问,看见了会回答的

机器翻译c语言,最详细的注释,看不懂你来打我相关推荐

  1. python【Numpy科学计算库】Numpy的超实用基础详细教程(看不懂你来打我)

    文章目录 Numpy简单介绍 1.Numpy是什么 2. 多维数组 numpy数据类型设定与转换 numpy索引与切片 多维数组索引.切片 数组文件输入输出 使用numpy.arange方法 使用nu ...

  2. Glide最详细走读!看不懂我自杀!

    Glide Glide是啥? 为什么选择Glide? 基本使用方式 `Glide.with(context)做了什么?此处以Activity为例` `RequestManager.load( url ...

  3. 读者写者问题(超详细讲解)看不懂算我输

    文章目录 读者写者问题 读者优先 1.初始化 2.写者 3.读者 写者优先 1.初始化 2.读者 3.写者 4.考虑读者1->写者1->读者2的情况 读者写者问题 1.允许多个读者可以同时 ...

  4. C语言编程规范--------2 注释

    2.1 注释的原则 注释的目的是解释代码的目的.功能和采用的方法,提供代码以外的信息,帮助读者理解代码,防止没必要的重复注释信息. 示例:如下注释意义不大. /* if receive_flag is ...

  5. Golang 从菜鸟到大咖的必经之路_GO 语言的转义字符、注释、规范和代码风格要求

    目录 一.GO 语言转义字符 A.Golang 常用的转义字符(escape char): B.课程练习 二.Go 语言注释: A.注释(Comment): B.Go 语言中的注释类型: C.注释不会 ...

  6. oracle - - 注释符,Oracle数据库扩展语言PL/SQL之注释、分隔符和标识符

    点击蓝字关注我吧 [本文详细介绍了Oracle数据库扩展语言PL/SQL的注释.分隔符和标识符,欢迎读者朋友们阅读.转发和收藏!] 1 基本概念 1.1 注释 注释不会被数据库编译,只是给开发人提供一 ...

  7. python语言中如何使用注释

    每一种计算机语言都有自己的注释方式,我们知道注释的作用是解释这些代码,方便程序员以后的检查和修改.而且注释的一部分在运行程序的过程中不起作用,也不会显示出来.下面我们将为大家介绍,在python语言中 ...

  8. 超详细中文注释的GPT2新闻标题生成项目

    超详细中文注释的GPT2新闻标题生成项目:https://zhuanlan.zhihu.com/p/338171330 笔者开源了一个带有超详细中文注释的GPT2新闻标题生成项目. 该项目参考了GPT ...

  9. 一分钟教你学会配置eslint,还在为风格单双引号,对象末位逗号要不要,引用各种报错而烦恼?(建议收藏!详细中文注释)...

    最全的eslint配置大全,我已经加了详细中文注释,只需要找到自己想要的配置就可以了,强烈建议收藏! 用法非常简单,找到.eslintrc.js下的rules添加对象即可,比如我要把规则原本单引号要变 ...

  10. c语言入门篇:注释定界符详解

    c语言的注释定界符是什么 1.最早期的C语言注释是:/**/ 2.后来又增加的行注释:// 其中/**/是多行注释,//是单行注释. 需要注意的是:C语言的注释并不是可以出现在C语言代码的任何地方. ...

最新文章

  1. 看我如何作死 | 将CPU、IO打爆
  2. android 周报,MAndroid 周报第八期
  3. java 谓词_谓词::不适合Java
  4. sizeof与strlen使用中的问题
  5. About Wisdom
  6. doubango安卓端的帧率太低,解决办法
  7. QT下的音乐播放器 (一)
  8. Vue学习--黑马电商管理系统
  9. js-xlsx使用-解析生成xlsx文件
  10. 不同iPhone屏幕尺寸
  11. 跑步戴哪种耳机好,最适合运动跑步的蓝牙耳机
  12. subDomainsBrute 子域名工具 源码分析
  13. 苹果x屏幕出现一条绿线_苹果iPad换屏幕出现售后问题解答
  14. SI(crosstalk)对common path的影响(CPPR)
  15. 有什么好用的语音转文字软件?介绍三个语音文件转文字的软件
  16. 模糊控制器隶属度函数绘制
  17. 基于asp.net网上选课系统设计
  18. kafka日志清理策略,compact和delete
  19. GeoTools读取Tiff文件
  20. 数据结构课程设计:1、单位员工通讯录管理系统(线性表的应用)

热门文章

  1. 音频转换成文字的软件哪个好用?推荐3个转换软件给大家
  2. LinkedIn技巧-领英怎么只给选择的好友群发消息?
  3. SCIChart如何绘制虚线
  4. git从gitHub下载代码
  5. python公众号点赞_python点赞
  6. 贝叶斯网络、EM算法推导
  7. 朋友圈广告助手进阶版v30.5.0
  8. 个人原创作品项目1-“师生助手app”(主要为简短的分享项目灵感来源和市场及需求分析,最后附上产品旧版本的Axure原型图部分交互操作视频)
  9. css,html简单骰子/色子代码
  10. 多线程之旅(Task 任务)