设为首页 收藏本站
查看: 1238|回复: 0

[经验分享] 2017 校招华为上机题

[复制链接]

尚未签到

发表于 2017-7-10 18:03:01 | 显示全部楼层 |阅读模式
  1. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母, a 换成b,z 换成a,Z 换成A,
如aBf 转换成bCg,字符串内的其他字符不改变,给定函数,编写函数
void Stringchang(const char*inpu,char*output)
其中input 是输入字符串, output 是输出字符串



#include<iostream>
#include<cctype>
#include<cstring>
using namespace std;
void stringchang(const char*, char*);
int main()
{
     char input[100],output[100];                      //不用再使用for循环来输入字符串数组了
     getline(cin,input);                          //可以直接使用getline()的方法既可以直接输入字符串数组,也可以直接输入string类对象
     stringchang(input,output);
     cout<<output<<endl;
     return 0;
}
void stringchang(const char* input, char* output)
{
     int m=strlen(input),n=0;
     for(int i=0;i<m;i++)
     {
         if (isalpha(input))
         {
             if (input== 'z')
             output[n++]= 'a';
             else if (input== 'Z')
             output[n++]= 'A';
             else
             output[n++]=input+1;
         }
    else
    output[n++]=input;
   }
output[n]= '\0';
}                                                                    
  2. 比较一个数组的元素是否为回文数组



#include<iostream>
#include<string>
using namespace std;
int main()
{
  string str;
  getline(cin,str);                //使用getline的方法直接将string类对象直接输入,不用再考虑1个1个输入了
  int m=str.size();
  for(int i=0;i<m/2;i++)
  {
    if (str!=str[m-1-i])
    {
      cout<<"NO" <<endl;
      return 0;
    }
  }
  cout<<"YES" <<endl;
  return 0;
}
   3.判断回文数,是返回1,不是返回0。



#include<iostream>
#include<string>
using namespace std;
int main()
{
  int num;
  cin>>num;
  string str;
  while (num>0)
  {
    str.push_back(num%10+'0');
    num/=10;
  }
  int m=str.size();
  for(int i=0;i<m/2;i++)
  {
    if (str!=str[m-1-i])
    {
    cout<< "0" <<endl;
      return 0;
  }
  }
  cout<<"1" <<endl;
  return 0;
}
  4.通过键盘输入一串小写字母(a~z) 组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的
  字符,将非首次出现的字符过滤掉。
比如字符串“ abacacde”过滤结果为“ abcde”。
示例
输入:“ deefd” 输出:“ def ”
输入:“ afafafaf ” 输出:“ af ”
输入:“ pppppppp” 输出:“ p”



#include<iostream>
#include<string>
using namespace std;
int main()
{
  string in_str,out_str;
  cin>>in_str;
  for(int i=0;i<n;i++)  
    {  
       int count=0;  
       for(int j=0;j<i;j++)  
       {  
         if(in_str ==in_str[j])  
          {  
            count++;  
          }  
                  
       }  
    }
        if(count==0)  
        {  
            out_str.push_back(in_str);  
        }  
    cout<<out_str<<endl;
    return 0;
}
  5.利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。
  比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
  给定一个string iniString为待压缩的串(长度小于等于10000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。


测试样例 "aabcccccaaa"
      返回:"a2b1c5a3"
   "welcometonowcoderrrrr"
     返回:"welcometonowcoderrrrr"


class Zipper {   
public:   
     string zipString(string iniString)
     {      
       string res;      
       for(int i = 0; i < iniString.length() - 1; i++)      
       {      
          int count = 1;   
          while(iniString == iniString[i+1])                            //和上一题类似,其实也可以用两个for循环,但就需要定义两个i,j变量,
          {
              ++count;                               //其实while=for+if,这样就可以只用1个变量。
              ++i;                                                        //所以典型的结构:for+for+if=for+while
          }
           res.push_back(iniString);  
           res+=to_string(count);      
       }      
       return iniString.size() >= res.size() ? res :iniString;      
     }   
};
   6.数组中数字都两两相同,只有一个不同,找出该数字:



#include<iostream>
using namespace std;
int main()           //用异或,相同的话为0,0异或一个数等于他本身
{
  int num[100],n=-1;
  while (cin>>num[++n]);
      {
    int temp=num[0];
    for(int i=1;i<n;i++)
    temp=temp^num;    
    }
10   cout<<temp<<endl;
11   return 0;
}
  7.数组中数字两两相同,有两个不同,找出这两个



#include<iostream>
using namespace std;
int main()
{
  int num[100],n=-1,a[2],flag=0,m=0;
  while(cin>>num[++n]);
  for(int i=0;i<n;i++)
  {
    flag=0;
for(int j=0;j<n;j++)
  {
      if (i!=j&&num==num[j])
flag=1;
}
  if (flag==0)
  a[m++]=num;
  if (m==2)
break;
}
  cout<<a[0]<< " " <<a[1]<<endl;
  return 0;
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-392473-1-1.html 上篇帖子: 华为 机试 List 下篇帖子: 2017华为机试题--Floyd算法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表