华科2017年计算机学院机试题(c++)
程序员文章站
2024-03-25 18:29:58
...
分析:直接记录字符对应数字进行输入输出
#include<iostream>
using namespace std;
int main(){
char c;
cin>>c;
if('A'<=c&&c<='Z'){
int n=c-'A';
for(int i=0;i<=n;i++)
{
for(int j=0;j<i;j++)
cout<<" ";
for(int k=0;k<=n-i;k++)
{
char s='A'+k;
cout<<s<<" ";
}
for(int k=n-i-1;k>=0;k--){
char s='A'+k;
cout<<s<<" ";
}
cout<<endl;
}
}
if('a'<=c&&c<='z'){ //两个部分可以统一处理减少代码
int n=c-'a';
for(int i=0;i<=n;i++)
{
for(int j=0;j<i;j++)
cout<<" ";
for(int k=0;k<=n-i;k++)
{
char s='a'+k;
cout<<s<<" ";
}
for(int k=n-i-1;k>=0;k--){
char s='a'+k;
cout<<s<<" ";
}
cout<<endl;
}
}
return 0;
}
分析:前处理,判断字符串规格后是否在字符串末尾添0;之后将字符转化为数字,再转字符添到末尾即可。
#include<iostream>
#include<string>
using namespace std;
string news;
int main(){
string str;
getline(cin,str);
if(str.size()%2)str+="0";
int sum=0;
for(int i=0;i<str.size();i++){
sum=sum*10+str[i]-'0';
if(i%2){
sum+=32;
news+=sum;
sum=0;
}
}
cout<<news<<endl;
return 0;
}
3.任意两个大数(正数)相加
分析:因为可能会溢出,不妨用字符串模拟相加结果,有点类似于两个链表相接的题目
#include<iostream>
#include<string>
using namespace std;
int main(){
string a,b,c;
getline(cin,a);
getline(cin,b);
int k=0;//进位标识符
int n=a.size(),m=b.size();
//下面步骤类似于两链表拼接
while(m&&n) {
int h=a[--n]+b[--m]-'0'-'0'+k;
c+=h%10+'0';
k=h/10;
}
while(n>0){
int h=a[--n]-'0'+k;
c+=h%10+'0';
k=h/10;
}
while(m>0){
int h=b[--m]-'0'+k;
c+=h%10+'0';
k=h/10;
}
if(k)//进位到最高位
c+=k+'0';
for(int i=c.size();i>0;){
cout<<c[--i];
}
cout<<endl;
return 0;
}
上一篇: 2016年华科834复试笔试题
下一篇: Linux如何简单配置TP地址