首页 > 技术文章 > 华为2018软件岗笔试题

cstdio1 2019-07-08 10:23 原文

题目描述

  输入两个字母串,将两个字母串都包含的字母用'_'替换后,输出两个字母串的剩余部分。
输入描述:
  输入两个字符串,字符串最大长度为100。字符串只包含字母,不可能为空串,区分大小写。
输出描述:
  按字符串顺序输出处理后的字符串

示例1
  输入
  abcd
  bdef
  输出
  a_c_ 
  __ef

#include "iostream"
using namespace std;

int main()
{
  string a,b;
  getline(cin,a);
  getline(cin,b);
  for(int i=0;i<a.size();i++){
      for(int j=0;j<b.size();j++){
          if(a[i]==b[j]){
              a[i]='_';
              b[j]='_';
          }
      }
  }
    cout<<a<<'\n'<<b<<endl;
    
    
    
}

 

  

题目描述
   一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。识别码的计算方法如下:

  首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。

  你的任务是编写程序根据输入的ISBN号码的前3段,计算出识别码,并输出完整的ISBN码。
输入描述:
  为一个ASCII字符串。内容为ISBN码的前三段,以上面为例,就是0-670-82162。
输出描述:
  若判断输入为合法的字符串,则计算出识别码,并输出完整的ISBN码;
  若输入不合法,则输出字符串”ERROR”;

 

示例1
  输入
  0-670-82162

  输出
  0-670-82162-4

 

#include "iostream"
#include "string"
using namespace std;

int main()
{
string a;
int s=0;
getline(cin,a);
if(a.size()!=11){cout<<"ERROR"<<endl;return 0;
}
for(int i=0;i<11;i++){
if(i==1||i==5){
if(a[i]!='-'){cout<<"ERROR"<<endl;return 0;}
}
else{
if(a[i]>'9'||a[i]<'0') {cout<<"ERROR"<<endl;return 0;}
}    
} 
for(int i=0;i<a.size();i++){
if(i==0) s+=(a[i]-'0')*(i+1);
else if(i>=2&&i<=4) s+=(a[i]-'0')*i;
else if(i>=6&&i<=10) s+=(a[i]-'0')*(i-1);
}
cout<<a<<"-";
if(s%11==10) cout<<'X'<<endl;
cout<<s%11<<endl;
}

  

 如有错误,欢迎指出 

推荐阅读