当前位置:   article > 正文

华为机试题整理_melon的难题华为机试题

melon的难题华为机试题

1、整数反转后求和

  1. #include <iostream>
  2. using namespace std;
  3. int reversenum(int x)
  4. {
  5. int a=0;
  6. while (x>0) {
  7. a=a*10+x%10;
  8. x/=10;
  9. }
  10. return a;
  11. }
  12. int reverseAdd(int a,int b)
  13. {
  14. if(a<1||a>70000||b<1||b>70000){
  15. return -1;
  16. }
  17. int num1=reversenum(a);
  18. int num2=reversenum(b);
  19. int sum=num1+num2;
  20. return sum;
  21. }
  22. int main()
  23. {
  24. int x;
  25. int y;
  26. cin>>x>>y;
  27. int sum=reverseAdd(x,y);
  28. cout<<sum;
  29. return 0;
  30. }

2.深度优先遍历(DFS他娘的现在和动态规划变成热门)

 

  

 

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. const int inf= 0x7f7f7f7f;
  5. //时间花费矩阵
  6. int a[][7]={
  7. {0},
  8. {0, 0, 2, 10, 5, 3, -1},
  9. {0, -1, 0, 12, -1, -1, 10},
  10. {0, -1, -1, 0, -1, 7, -1},
  11. {0, 2, -1, -1, 0, 2, -1},
  12. {0, 4, -1, -1, 1, 0, -1},
  13. {0, 3, -1, 1, 0, 2, 0}
  14. };
  15. int x,y;//目的地,大雾城市
  16. int res;
  17. int used[10];//record falg
  18. int d[50];//记录路
  19. int haveded[50];//走过的路
  20. int anscost=inf;
  21. int anspath;
  22. /*====出发地,花费时间,路径个数=====*/
  23. void dfs(int now,int cost,int path)
  24. {
  25. if(now==x){
  26. if(cost<anscost){
  27. anscost=cost;
  28. for(int i=0;i<path;i++){
  29. haveded[i]=d[i];
  30. }
  31. anspath=path;
  32. }
  33. return;
  34. }
  35. for(int i=1;i<=6;i++){
  36. if(i==y){
  37. continue;
  38. }
  39. if(used[i]==0&&a[now][i]>=0){
  40. used[i]=1;
  41. d[path]=i;
  42. dfs(i,cost+a[now][i],path+1);
  43. used[i]=0;
  44. }
  45. }
  46. }
  47. int main()
  48. {
  49. static char emp[] = "";
  50. static char col[] = ", ";
  51. cin>>x>>y;//出差城市,大雾城市
  52. if (x == 5)
  53. {
  54. cout<<"0\n[]\n";
  55. return 0;//出差为5的话,0不可达
  56. }
  57. if (y == 5)
  58. {
  59. cout<<"1000\n[]\n";
  60. return 0;//大雾为5的话,1000不可达
  61. }
  62. d[0] = 5;
  63. used[5] = 1;
  64. dfs(5, 0, 1);//核心算法
  65. char *p = emp;
  66. if (anscost == inf)
  67. {
  68. printf("1000\n[]\n");
  69. }
  70. else
  71. {
  72. cout<<anscost<<"\n[";
  73. for (int i = 0; i < anspath; i++)
  74. {
  75. cout<<p<<haveded[i];
  76. p = col;
  77. }
  78. printf("]\n");
  79. }
  80. return 0;
  81. }

 

 3.

题目描述

请设计一个算法完成两个超长正整数的加法。

输入描述:

输入两个字符串数字

输出描述:

输出相加后的结果,string型

  1. #include<iostream>
  2. #include <string>
  3. #include <algorithm>
  4. using namespace std;
  5. int main()
  6. {
  7. string a;
  8. string b;
  9. cin>>a>>b;
  10. int n1=a.size();
  11. int n2=b.size();
  12. string x,y;
  13. for(int i=0;i<n1;i++){
  14. x[i]=a[n1-1-i];
  15. }
  16. for(int i=0;i<n2;i++){
  17. y[i]=b[n2-1-i];
  18. }
  19. if(n1<n2){
  20. for(int i=n1;i<n2;i++){
  21. x[i]='0';
  22. }
  23. }else{
  24. for(int i=n2;i<n1;i++){
  25. y[i]='0';
  26. }
  27. }
  28. int sum[100];
  29. int carry=0;
  30. int n=max(n1,n2);
  31. for(int i=0;i<n;i++){
  32. int c=x[i]-48+y[i]-48+carry;
  33. if(c<10){
  34. sum[i]=c;
  35. carry=0;
  36. }else{
  37. sum[i]=c-10;
  38. carry=1;
  39. }
  40. }
  41. if(carry==1){
  42. sum[n]=1;
  43. n=n+1;
  44. }
  45. // for(int j=0;j<n;j++)
  46. // cout<<sum[n-1-j];
  47. // cout<<endl;
  48. string res[100];
  49. for(int j=0;j<n;j++){
  50. res[j]=sum[n-1-j]+'0';
  51. }
  52. for(int j=0;j<n;j++){
  53. cout<<res[j];
  54. }
  55. cout<<endl;
  56. return 0;
  57. }

4. 

 

输入描述:

输入一个字符串。

输出描述:

输出字符串中最长的数字字符串和它的长度。如果有相同长度的串,则要一块儿输出,但是长度还是一串的长度

示例1

输入

abcd12345ed125ss123058789

输出

123058789,9
  1. #include<iostream>
  2. #include<string>
  3. #include<vector>
  4. using namespace std;
  5. int main()
  6. {
  7. string str;
  8. while(cin>>str)
  9. {
  10. string tmp;
  11. vector<string> arr;
  12. for(int i=0;i<=str.length();i++)
  13. {
  14. if(str[i]>='0' && str[i]<='9')
  15. {
  16. tmp+=str[i];
  17. }
  18. else
  19. {
  20. if(tmp.length()!=0)
  21. {
  22. arr.push_back(tmp);
  23. }
  24. tmp.clear();
  25. }
  26. }
  27. int max=0;
  28. int length=0;
  29. for(int i=0;i<arr.size();i++)
  30. {
  31. if(max<(arr[i]).length())
  32. {
  33. max=(arr[i]).length();
  34. length=max;
  35. }
  36. }
  37. for(int i=0;i<arr.size();i++)
  38. {
  39. if(max==(arr[i]).length())
  40. {
  41. cout<<arr[i]<<" ";
  42. }
  43. }
  44. cout<<","<<length<<endl;
  45. }
  46. return 0;
  47. }

 5.计算1的的个数

  1. int countInnums(int iNum){
  2. int iCount=0;
  3. iNum=abs(iNum);
  4. while(iNum){
  5. iCount++;
  6. iNum=iNum&(iNum-1);
  7. }
  8. return iCount;
  9. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/174153
推荐阅读
相关标签
  

闽ICP备14008679号