题目:
明明学习数学已经有一段时间了。一次老师在课上讲了什么叫质数。质数就是大于等于2且只能被1和其本身整除的整数。明明觉得这很简单,以为这很容易掌握,于是就不多做练习。明的爸爸发现了这个问题,他想让明明多做练习,把质数这个知识点掌握牢固。但是,他也知道只是求质数会很无聊,明明一定不愿意多做。于是他想出了一个游戏,这个游戏叫"找出质数",就是给明明一个数字串,要叫明明在这个数字串中找出一个最大的子串,要求这个子串是一个质数。 但是由于明明还太小,他的计算能力有限,因此明明的爸爸认为,找出长度大于4个字符的质数对明明来说太困难了。于是他降低了要求,只需找出小于10,000的最长的质数子串即可。 例如:有一个数字串为17,最大的子串就应该是17,因为1不是质数,7虽然是质数,但是7的长度只有1,17也是质数,它的长度为2,因此最大的子串就是17。 明明觉得这个游戏很有趣,就高兴地做了起来,明明的爸爸出了很多个数字串,由于数字串太多,所以明明爸爸自己找出最长的子串也要花很多的时间,于是明明的爸爸想让你帮他一个忙,写一个程序,找出数字串中最长的质数子串。
明明爸爸的问题可以归结为:输入一串数字,找出其中最长的不超过4个字符的质数子串。若有多个答案,则找出其中数值最大的一个。
要点总结:
长度一定在1到min(4,字符串长度)之间,直接遍历所有可能的长度以及所有可能的起始位置,设置max全局变量去更新即可。(必须要遍历所有长度,因为短的如果是0打头也可能比长度长的要小)。另外,判断质数的方法不要忘记。
代码:
#include<bits/stdc++.h>
using namespace std;
bool iszhi(int n){
if(n<2) return false;
if(n==2) return true;
if(n%2==0) return false;
for(int i=3;i<=sqrt(n);i+=2){
if(n%i==0){
return false;
}
}
return true;
}
int main(){
string s;
while(cin>>s){
int maxlen=min({4,(int)s.size()});
int max=INT_MIN;
string maxs="";
string res;
for(int len=1;len<=maxlen;len++){
for(int start=0;start<=s.size()-len;start++){
string a="";
for(int i=0;i<len;i++){
a+=s[start+i];
}
int b=stoi(a);
if(iszhi(b)){
if(b>max){
max=b;
maxs=a;
}
}
}
}
cout<<maxs<<endl;
}
return 0;
}
题目:
在现代战争中,情报战越来越显示出它的重要性,敌我双方都想方设法得到对方的情报,然后一举歼灭对方。然而,随着加密技术的出现,对情报进行加密变得越来越频繁,想破解敌方的情报也越来越难。明明是一名富有经验的情报工作人员,他的主要任务就是破解敌方的情报,从而得到对己方有利的信息。在一次破解情报任务中,明明再次成功地破解了敌方的情报。明明的破解方法如下:一串以'@'为结束标志的字符串,从左至右对其进行翻译,若字符串中当前字符是整数n(0≤n≤9),则表示将后一个字符重复n+1次,不论后一个字符是否为数字,且后一个字符无需再次翻译;若当前字符非数字,则表示自己,无需翻译,直接输出即可。最后,输出翻译完的字符串。
例如字符串为:2d352d@,因为第一个字符为数字2,则将后一个字符d输出3次,而d则不需再翻译,然后翻译3,3也是一个数字,则将后一个字符5输出4次,而5则不需再翻译,然后翻译2,2也是一个数字,将后一个字符d输出3次,而d则不需再翻译,最后一个字符为@,表示自己,直接输出即可,最后的输出为:ddd 555 5dd d@;(注:在翻译时,'@'当作字符处理。) 这样翻译字符串的方法虽然简单,但是由于敌方的文件巨大,仅仅靠手工翻译是很难在短时间内完成的。于是明明就求助于你这位程序专家,按照明明提供的破译方法写一个程序,帮助明明快速把敌方文件翻译完成。
明明的问题可以归结为:按照文中提供的破译情报的方法,对字符串进行翻译,然后输出翻译后的字符串。
要点总结:
按照题目要求读,以ascall码再0的和9的码之间去判断是否是非数字,非数字就直接push_back进res数组,数字的话把它后面元素push数字+1次,之后再把i++来跳过后面一个元素。这里必须得是else if(s[i]<'0'||s[i]>'9'),这是debug才发现的,如果只写if进了第一个之后,i++完可能又进第二个,无法跳过了。
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
while(cin>>s){
vector<char> res;
for(int i=0;i<s.size();i++){
if(s[i]>='0'&&s[i]<='9'){
for(int j=0;j<((s[i]-'0')+1);j++){
res.push_back(s[i+1]);
}
i++;
}
else if(s[i]<'0'||s[i]>'9'){
res.push_back(s[i]);
}
}
int a=0;
for(int i=0;i<res.size();i++){
if(a%3==0&&a!=0){
cout<<" ";
a=0;
}
cout<<res[i];
a++;
}
cout<<endl;
}
return 0;
}
题目:
输入一串字符,其长度小于200,判断该串字符是否构成回文。 所谓回文是指从左到右和从右到左读一串字符的值是一样的,如:ABCBA。
要点总结:
纯送分
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
while(cin>>s){
string s1=s;
reverse(s.begin(),s.end());
bool flag=true;
for(int i=0;i<s.size();i++){
if(s[i]!=s1[i]){
flag=false;
break;
}
}
if(!flag){
cout<<"No"<<endl;
}else{
cout<<"Yes"<<endl;
}
}
return 0;
}
英语翻译:
在开发计算机软件的过程中,计算机科学家和工程师研究了软件设计的各个领域和技术,例如特定项目中用到的最好的编程语言和算法,如何高效存取信息,以及某些软硬件结合的计算限制。在开发程序时软件设计师必须考虑很多因素。他们通常需要牺牲程序在某一方面的表现以使软件的整体表现最优化。例如由于计算机内存大小有限,软件设计师必须限制他们程序中用到的特性以便不会超出计算机系统能够提供的内存大小。
软件工程是软件开发的一个领域,在该领域中计算机科学家和工程师研究能促进开发高效、可靠、健壮的计算机程序的方法和工具。在该计算机科学分支的研究要考虑软件生命周期的各个阶段,从一个正式的具体问题,到解决方案的设计,其实施应用就是程序,到程序的测试,再到程序的维护。软件工程师开发被称作编程环境的软件工具以及工具集来提升开发过程的效率。例如工具可以帮助管理一个程序员团队所编写的大型程序的各个组件。
计算机工程致力于设计和分析新的计算机系统。计算机工程师研究通过增加计算机的运行速度、存储能力、可靠性以及减少其开销和能源损耗来提升计算机性能的方法。计算机工程师开发软硬件模型来分析现存的或者现在提出的计算机设计的表现,并且将这些分析应用于指导新型计算机的发展。他们通常会涉及新型计算机的设计因为他们模型的准确率依赖于电路的设计。很多计算机工程师感兴趣的点在于开发为例如图像处理、信号处理、机器系统控制这样特定应用的专用计算机。计算机工程对于具体任务的优化通常会产生更高的性能表现,更低的开销或者二者兼而有之。
software-computer combinations软硬件组合
"Computer architecture"和"Computer architects",这是计算机科学中的标准术语"计算机体系结构"和"计算机体系结构师"。
memory内存
-storage外存/存储
