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