2.18完成109、112、113

题目:

给你两个正的实数A和B,你的任务是计算出A+B的值。

要点总结:

和前面手动模拟加法竖式一个思想,但是这里不是单纯整数而是正实数加法,就会复杂些。得按小数点拆成两个字串,处理整数串时和之前一样从后往前操作,而处理小数串时需要先补0,某则直接从末尾加位数对不上。处理两个串的while条件也不同,小数串最后的进位不能增加小数位数,需要进给整数串。另外,不要for循环写习惯了写while每次都忘m--和n--。最后也需要判断一下是否有小数,不要不判断都输出小数点

代码:

#include<bits/stdc++.h>

using namespace std;

int main(){

int num;

cin>>num;

for(int i=0;i<num;i++){

string s1,s2;

cin>>s1>>s2;

string int1,dec1,int2,dec2;

int pos1=s1.find('.');

if(pos1==-1){

int1=s1;

dec1="";

}else{

int1=s1.substr(0,pos1);

dec1=s1.substr(pos1+1);

}

int pos2=s2.find('.');

if(pos2==-1){

int2=s2;

dec2="";

}else{

int2=s2.substr(0,pos2);

dec2=s2.substr(pos2+1);

}

int m=dec1.size()-1,n=dec2.size()-1;

int jin=0,jin2=0;

string res="",res2="";

if(m>=0||n>=0){

int maxlen=max(dec1.size(),dec2.size()) ;

dec1.resize(maxlen,'0');

dec2.resize(maxlen,'0');

m=dec1.size()-1,n=dec2.size()-1;

while(m>=0||n>=0){

int a=m>=0 ? dec1[m]-'0' : 0;

int b=n>=0 ? dec2[n]-'0' : 0;

int sum=a+b+jin;

int cur=sum%10;

jin=sum/10;

res+=(cur+'0');

m--;

n--;

}

reverse(res.begin(),res.end());

jin2=jin;

while((res[res.size()-1]-'0')==0){

res=res.substr(0,res.size()-1);

}

}

int m1=int1.size()-1,n1=int2.size()-1;

while(m1>=0||n1>=0||jin2>0){

int a1=m1>=0 ? int1[m1]-'0' : 0;

int b1=n1>=0 ? int2[n1]-'0' : 0;

int sum1=a1+b1+jin2;

int cur1=sum1%10;

jin2=sum1/10;

res2+=(cur1+'0');

m1--;

n1--;

}

reverse(res2.begin(),res2.end());

string fina="";

if(res.size()>0){

fina=res2+"."+res;

}else{

fina=res2;

}

cout<<fina<<endl;

}

return 0;

}

题目:

密码分析学中常常需要统计字符出现的频度。给定若干行短文,要求按字符出现的频度由高到低输出,当两个字符出现的频度相同时,按字符大小的顺序输出。

注意:只需要统计英文字母的频度,非英文字母一律忽略。

要点总结:

不要每读一个字符就新建一个结构体塞到vector里面,这样子不好确定每个字符的频次。先用一个int数组记录每个字符的频次,其长度为26,下表就对应A-Z,全部存储好之后遍历该数组取出频次大于0的声明结构体压入vector里面,然后定义排序规则去排序。

代码:

#include<bits/stdc++.h>

using namespace std;

struct conbine{

char b;

int record;

};

bool compa(conbine m,conbine n){

if(m.record!=n.record) return m.record>n.record;

if(m.b!=n.b) return m.b<n.b;

};

int main(){

string s;

bool flag=false;

while(getline(cin,s)){

int record[25]={0};

for(int i=0;i<s.size();i++){

if(isalpha(s[i])){

char a=s[i];

a=toupper(a);

record[a-'A']++;

}

}

if(flag){

cout<<endl;

}else{

flag=true;

}

vector<conbine> res;

for(int i=0;i<=25;i++){

char b='A'+i;

if(record[i]!=0){

conbine c;

c.b=b;

c.record=record[i];

res.push_back(c);

}

}

sort(res.begin(),res.end(),compa);

for(int i=0;i<res.size();i++){

cout<<res[i].b<<" "<<res[i].record<<endl;

}

}

return 0;

}

题目:

你的程序需要从标准输入设备(通常为键盘)中输入N(1≤N≤10)个学生的信息,每项信息包含该学生的编号、姓名、性别、年龄、成绩共五项,按成绩进行排序,然后按成绩从低到高输出,输入保证没有相同的成绩。

要点总结:

简单题,定义结构体以及比较方法即可

代码:

#include<bits/stdc++.h>

using namespace std;

struct student{

int id;

string name;

string sex;

int age;

int grade;

};

bool compa(student a,student b){

if(a.grade!=b.grade) return a.grade<b.grade;

};

int main(){

int n;

cin>>n;

vector<student> a;

for(int i=0;i<n;i++){

student s;

cin>>s.id>>s.name>>s.sex>>s.age>>s.grade;

a.push_back(s);

}

sort(a.begin(),a.end(),compa);

for(int i=0;i<a.size();i++){

cout<<a[i].id<<" "<<a[i].name<<" "<<a[i].sex<<" "<<a[i].age<<" "<<a[i].grade<<endl;

}

return 0;

}

英语翻译:

如果一台计算机能步入世上最快的计算机之列,则我们称其为超级计算机。由于它们的速度,超级计算机可以处理对其他计算机来说不切实际的复杂任务。超级计算机的典型用途包括破破解密码、模拟世界各地的天气系统以及模拟核爆炸。

例如IBM、Cray以及中国的NRCPC的计算机制造商近几年在世界高速计算机的领域独占鳌头。超级计算机的速度以peataflops来衡量。一peataflops是惊人的疫苗一千万亿次运算,大约比你的笔记本电脑快20000倍。

大型机(或简称主机)是能够同时为成百上千用户加工数据的大型昂贵的计算机。它主要的处理回路被放置在衣柜大小的柜子里,但在添加了大量大型存储以及输出组件后,大型机可以装满一个相当大的房间。

相关推荐
追随者永远是胜利者2 小时前
(LeetCode-Hot100)64. 最小路径和
java·算法·leetcode·职场和发展·go
汉克老师2 小时前
GESP2024年6月认证C++二级( 第三部分编程题(1) 平方之和)
c++·算法·预处理·完全平方数·循环结构·gesp二级·gesp2级
云深处@2 小时前
【题】每日一题
算法
智者知已应修善业2 小时前
【排列顺序判断是否一次交换能得到升序】2025-1-28
c语言·c++·经验分享·笔记·算法
yzs873 小时前
OLAP数据库HashJoin性能优化揭秘
数据库·算法·性能优化·哈希算法
好家伙VCC4 小时前
**发散创新:编译器优化实战——从LLVM IR到性能飞跃的奇妙旅程**
java·开发语言·python·算法
季明洵4 小时前
数据在内存中的存储
数据结构·算法·c
weixin_458872614 小时前
东华复试OJ每日3题打卡·复盘85~87
算法
追随者永远是胜利者4 小时前
(LeetCode-Hot100)70. 爬楼梯
java·算法·leetcode·职场和发展·go