HuaWei-面试题Traing-01

本文集包含了一系列华为面试常考的编程题目,涉及字符串处理、数组操作、数据结构使用等核心内容,通过具体代码实例帮助读者掌握相关技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HuaWei-面试题Traing

  1. 连续输入三个字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

其具体实现代码如下:

#include<iostream>
#include<string>
using namespace std;

void fun(string s)
{
	while(s.size()>8)
	{
		cout<<s.substr(0,8)<<endl;
		s = s.substr(8);
		
	}
	cout<<s.append(8-s.size(),'0')<<endl;
	
}

int main()
{
	string s1;
	string s2;
	string s3;
	cout<<"请输入字符串s1:"<<endl; 
	getline(cin,s1);
	cout<<"请输入字符串s2:"<<endl; 
	getline(cin,s2);
	cout<<"请输入字符串s3:"<<endl; 
	getline(cin,s3);
	fun(s1);
	fun(s2);
	fun(s3);
	return 0;
}
  1. 对数组大小为1-100的数组,输入该数组大小范围内的若干个数组元素,输出排序去重后的结果数组元素:
    其具体实现代码如下:
#include<iostream>
#include<string>
using namespace std;

int main()
{
	int arr[100];
	int tmp;
	int flag = 0;
	int count;
	cout<<"请输入数组个数"<<endl;
	while(cin>>count)
	{
	cout<<"请依次输入数组"<<endl;
    for(int i = 0;i<count;i++)
    {
    	cin>>arr[i];
	}
	for(int i= 0;i<count-1;i++)
	{
	  for(int j = i+1;j<count-flag;j++)
	  {
	  	  if(arr[i] < arr[j])
	  	  {
	  	  	tmp = arr[i];
	  	  	arr[i] = arr[j];
	  	  	arr[j] = tmp;
		  }
		  if(arr[i] == arr[j])
		  {
		  	flag++;
		  	for(int k =j;k<count -1;k++)
		  	{
			   	arr[k]=arr[k+1];	
			  }
		    j--;
		  }
	  }
	  	}
	
	  cout<<"请输出排序去重后的数组:" <<endl; 
	  for(int i = 0;i<count-flag;i++)
	  {
	  	  
		  cout<<arr[i]<<endl;
	  }
	}
	
	return 0;
	
}
  1. 输入一个正整数,请输出该整数的非质数因子:
    其具体实现的代码如下:
#include<iostream>
#include<string>
using namespace std;

int main()
{
  int num;
  cout<<"请输入一个正整数:"; 
  cin>>num;
  for(int i= 2;i<num;i++)
  {
    bool flag = true;
    for(int j = 2;j<i;j++)
    {
    	if(i%j == 0)
    	{
    		flag = false;
		}
	}
	
  if(flag)
  {
  	if(num % i == 0)
  	{
  		num = num / i;
  		cout<<i<<" ";
	  }
  }
  } 
		return 0;
	
}
  1. 请输入一个正浮点数值,输出该浮点数值的近似整数值。
    其具体实现代码如下:
#include<iostream>
using namespace std;

int main()
{
  float num;
  cout<<"请输入一个正浮点数值:";
  cin>>num;
  cout<<"请输出该浮点数的近似整数值"<<int(num+0.5)<<endl;; 
  
	return 0;
	
}
  1. 合并表记录,对数据记录中的表索引相同的value进行合并,即将表索引相同的value进行求和输出;
    其具体实现代码如下:
#include<iostream>
using namespace std;

int main()
{
 int n,key,value; 
 cout<<"请输入记录数:";
 cin>>n;
 cout<<"请输入"<<n<<"个对应的key,value"<<endl; 
 int arr[n];
 for(int i = 0;i<n;i++)
 {
 	 cin>>key>>value;
	  cout<<endl; 
	  arr[key]+=value;
	  
 }
 cout<<"请输出合并表记录之后的结果:" ;
for(int i =0;i<n;i++)
{
    if(arr[i] != 0)
    {
    cout<<i<<" "<<arr[i]<<endl;	
	}
	
} 
	return 0;
}
  1. 提取不重复的整数:输入一个Int型整数,并从右往左去掉重复的数字,按照从数字大小从小到大输出:此处用到了set集合
    其具体实现代码如下:
#include<iostream>
#include<set>
using namespace std;

int main()
{
 int arr[10]={0};
 int num;
 cout<<"请输入一个int型整数:";
 cin>>num; 
 set<int> s;
 set<int>:: const_iterator iter;
 while(num)
{
	int tmp;
	tmp=num%10;
	s.insert(tmp);
	num = num/10;
 } 
 
  cout<<"请输出去重后的结果:"<<endl; 
  if(s.empty())
  {
  	cout<<"set为空。。。"<<endl; 
  }
  for(iter = s.begin();iter!= s.end();iter++)
  {
  	 cout<<*iter<<" ";
  }
	return 0;	
}

7.提取不重复的整数:输入一个Int型整数,并从右往左去掉重复的数字输出:此处用到了vector集合
其具体实现的代码如下:

#include<iostream>
#include<vector>
using namespace std;

int main()
{
 int arr[10]={0};
 int num;
 cout<<"请输入一个int型整数:";
 cin>>num; 
 vector<int> v;
 while(num)
{
	int tmp;
	tmp=num%10;
    arr[tmp]++;
    if(arr[tmp]>0&&arr[tmp]<2)
    {
    	v.push_back(tmp);
	}
	num = num/10;
 } 
  cout<<"请输出去重后的结果:"<<endl; 
  for(int i = 0;i<v.size();i++)
  {
	   cout<<v[i];
 }
	return 0;	
}

8.统计字符个数:输入一个字符串,计算该字符串中不同字符的个数
其具体实现代码如下:

#include<iostream>
#include<set>
using namespace std;

int main()
{
 string str;
 cout<<"请输入一个字符串:" ;
 cin>>str;
 set<char> s;
 set<int>:: const_iterator iter;
 
 	for(int i=0;i<str.length();i++)
 	{
 		s.insert(str[i]);
	 }
 
  if(s.empty())
  {
  	cout<<"set为空。。。"<<endl; 
  }
  
  	 cout<<"字符大小: "<<s.size();
	return 0;
	
}

9.整数逆序输出:输入一个正整数,请输出该整数颠倒后逆序输出的结果;
其具体实现的代码如下:

#include<iostream>
#include<vector>
using namespace std;

int main()
{
 int num;
 cout<<"请输入一个正整数:" ;
 cin>>num;
 vector<int> vc;
 while(num) 
 {
 	int s;
 	s= num%10;
 	vc.push_back(s);
 	num = num/10;
 }
 cout<<"请输出该正整数逆序输出的结果:" ;
  for(int i = 0;i<vc.size();i++)
  {
  	cout<<vc[i];
  }
	return 0;
}

10.逆序输出英文句子:输入一个英文句子,将该句子包括句子中的单词逆序颠倒后输出;
其具体实现的代码如下:

#include<iostream> 
#include<stack>
#include<string>

using namespace std;

int main()
{
	string str;
	stack<string> ss; 
   
	while(cin>>str)
	{	
			ss.push(str);	
	}
	 
	while(!ss.empty())
	{
		cout<<ss.top();
		ss.pop();
        if(!ss.empty())    //当Stack中栈顶元素为空时
        {
            cout<<" ";
        }   	
	}    
	return 0;
}

11.字符串的按照字典序排序的最长路径查找:输入n和字符串,将该n个字符串按照字典序排序后在输出;
其具体实现代码如下:

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

int main()
{
    int num;
    cin>>num;
    string str;
    vector<string> vc;
    vector<string>:: iterator iter;
    for(int i=0;i<num;i++)
    {
    	cin>>str;
    	vc.push_back(str);
	}
	sort(vc.begin(),vc.end());
	
	for(iter = vc.begin();iter != vc.end();iter++)
	{
		cout<<*iter<<endl;
	}
	return 0;
}

12.求一个int型整数在内存总存储时1的数量;
其具体实现代码如下

#include<iostream>
#include<algorithm>

using namespace std;
int main()
{
    int n;
    cout<<"请输入一个int型整数:" 
    cin>>n;
    int sum = 0;
    while(n!=0)
    {
        n = n&(n-1);   //&:n-1用二进制表示为原整数的二进制最右边的1变为0,最右边的1之后的0均变为1,将  n与n-1做&运算,原整数的二进制的个数会减少一个 ,循环该操作,直到原整数二进制内存1的个数为0为止 
        sum++;
    }
    
    cout<<"请输出该int型整数在内存总存储时1的个数:" <<sum;
    return 0;
}

13.坐标移动:开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。
输入:
合法坐标为A(或者D或者W或者S) + 数字(两位以内)
坐标之间以;分隔。
下面是一个简单的例子 如:
A10;S20;W10;D30;X;A1A;B10A11;;A10;
结果 (10, -10)
其具体实现代码如下:

#include<iostream>
#include<string>
#include<cstddef>
using namespace std;

int main()
{
  string s; 
  cin>>s;
  	  pair<int,int> pp(0,0);
	  size_t found = s.find_first_of(';');
	  int start = 0;
	  while(found != std::string::npos)
	  {
		   string s1 = s.substr(start,found-start);
		   start = found+1;
		   found = s.find_first_of(';',found+1);
		  if(s1.size()>1 && s1.size()<=3)
	    {
	  	   int n = 0; 
	  	   char c = s1[0];
	  	   int invalid = 0;
	  	   
			 for(int i = 1;i < s1.size();i++)
	  	   {
	  	   	 if(s1[i]>='0' && s1[i]<='9')
	  	   	 {
	  	   	 	 n = n *10+(s1[i]-'0');
			 } 
			  else
			 {
			  invalid = 1;
			  break;	
			 } 	
		   }
              if(invalid == 0)
              {
                  switch(c)
		        {
			
			  case 'A': {pp.first -= n;break; }
			  case 'D': {pp.first += n;break;	}
			  case 'S': {pp.second -= n;break; }
			  case 'W': {pp.second += n;break;	}
		       }
             }  	
	    }		
	  }
	  cout<<"输出结果为:" <<pp.first<<','<<pp.second<<endl;
	return 0;  
  }

14.统计一个字符串最后单词的长度:输入一个字符串,计算该字符串最后一个单词的长度,单词以空格隔开:
其具体实现代码如下:

#include<iostream>
#include<string>

using namespace std;

int main()
{
	string str;
    cout<<"请输入一行字符串:" ;
    getline(cin,str);
    int sum = 0;
    for(int i=str.size()-1;i>=0;i--)
    {
    	if(str[i]!= ' ')
    	{
    		sum++;
		}
		else
		{
			break;
		}
	}
	cout<<"该字符串最后一个单词的长度为:" <<sum<<endl;
    
	return 0;
}

15.统计输入的某个字符在一个字符串中相同字符的个数:输入一行字符串和一个字符,计算该字符与字符串中的字符相同的个数;
其具体实现代码如下:

#include<iostream>
#include<string>

using namespace std;

int main()
{
	string str;
    cout<<"请输入一行字符串:" ;
    getline(cin,str);
    char c;
    cout<<"请输入一个字符:" ;
    cin>>c;
    int n = 0;
    for(int i = 0;i<str.size();i++)
    {
        if(str[i] == toupper(c) || str[i] == tolower(c))
        {
        	n++; 
		}	
	}
	cout<<"该输入字符串最含有该字符的个数为:" <<n<<endl; 
    
	return 0;
}

16.明明的随机数:输入N个1~1000之间的整数,输出对这n个整数去重排序后的结果(排序从大到小)
其具体实现代码如下:

#include<iostream>
#include<set>

using namespace std;

int main()
{
    int N;
  while(cin>>N)
  {
    int array[1000] = {0};
    set<int> s;
    set<int>::iterator iter;
    for(int i = 0;i < N;i ++)
    {
		cin>>array[i];
        s.insert(array[i]);
    }
    for(iter = s.begin();iter != s.end();iter++)
    {
        cout<<*iter<<endl;
    }
  }
    return 0;
}

17.提取不重复的整数(无需排序):输入一个Int型整数,并从右往左去掉重复的数字输出;
其具体实现代码如下:

#include<iostream>
#include<array>

using namespace std;

int main()
{
    int num;
    int arr[10]={0};
    int rst = 0; 
    cin>>num;
    while(num)
    {       
      if(arr[num%10] == 0)   //arr[num%10] == 0 表示num%10没在计数数组arr中出现过
       {
        arr[num%10]++;   //,当第一次出现num%10,计数数组arr加一
        rst = rst * 10+ num%10;      
       }
         num = num /10;
    }
     cout<<rst<<endl;
     return 0;
}

18.编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次;
例如,对于字符串abaca而言,有a、b、c三种不同的字符,因此输出3;
其具体实现代码如下:

#include<iostream>
#include<set>
#include<string>

using namespace std;

int main()
{
   string str;
   set<char> ss;
   while(cin>>str)
   {  
       for(int i = 0;i<str.size();i++)
       {
          ss.insert(str[i]);
       }
   }
   cout<<ss.size()<<endl;  
    return 0;
}

19.名字的漂亮数:给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。
给出多个名字,计算每个名字最大可能的“漂亮度”。
Input:
整数N,后续N个名字
Output:
每个名称可能的最大漂亮程度
其具体实现的代码如下:

#include<iostream>
#include<string>
#include<algorithm>

using namespace std;
int fun(string str)
{
    int count[26]={0};
    int value[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26};
    int sum = 0;
    for(int i = 0;i<str.size();i++)
  {
      if(str[i] >= 'a' && str[i] <= 'z')
      {
          count[str[i]-'a']++; 
      }
        else if(str[i] >= 'A' && str[i] <= 'Z')
        {
           count[str[i]-'A']++; 
        }
  }
    sort(count,count+26);
    for(int i = 0;i < 26;i++)
    {
        sum+=count[i] *value[i];
    }
    return sum;
   
}
int singacle(int x)
{
    string st;
    for(int i = 0;i < x;i++)
    {
        cin>>st;
        cout<<fun(st)<<endl;
    }
    return 0;
}
int main()
{
  int n;
  while(cin>>n)
  {
    singacle(n);   
  }
  return 0;
}

20.字符统计:如果统计的个数相同,则按照ASCII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
实现以下接口:
输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)
按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASCII码由小到大排序输出
清空目前的统计结果,重新统计
调用者会保证:
输入的字符串以‘\0’结尾。
其具体实现代码如下:

#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<algorithm>

using namespace std;

 struct ST
   {
      char c;
      int n;
   };

bool cmp(struct ST a,struct ST b)
{    
        if(a.n>b.n) return a.c>b.c;
        else return a.c<b.c;
}
int main()
{
    map<char,int> mp;
    map<char,int>::iterator it;
    string ss;
    vector<ST> vv;
 while(cin>>ss)
 {
    for(int i=0;i<ss.size();i++)
    {
        it=mp.find(ss[i]);
        if(it == mp.end())
        {
            mp.insert(pair<char,int>(ss[i],1));           
        }
        else
        {
            mp[ss[i]] += 1;
        }
    }
    for(it = mp.begin();it != mp.end();it++)
    {
        ST csh;
        csh.c = it->first;
        csh.n = it->second;
        vv.push_back(csh);
    }
    sort(vv.begin(),vv.end(),cmp);
    for(int i= 0;i<vv.size();i++)
    {
       cout<<vv[i].c; 
    } 
     cout<<endl;
 }
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值