`
wangleide414
  • 浏览: 606626 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

华为历年机试题

 
阅读更多

1.找出一个数组中满足2^N的元素

#include <iostream>

using namespace std;

int find(int a[],int len);

void main()

{

int a[]={1,2,3,5,7,8,16};

int len=sizeof(a)/sizeof(int);

cout<<find(a,len)<<endl;

}

int find(int a[],int len)

{

int i;

int count=0;

for(i=0;i<len;i++)

{

if(0==(a[i]&(a[i]-1)))

count++;

}

return count;

}

 

#include <iostream>

using namespace std;

void func(int n, int m, int s, int a[]);

void main()

{

int a[9]={0};

func(9,3,1,a);

for(int i=8;i>=0;i--)

cout<<a[i]<<" ";

cout<<endl;

}

void func(int n, int m, int s, int a[])

{

int s1;

int w;

s1=s;

for(int k=0;k<n;k++)

{

a[k]=k+1;

}

for(int i=n;i>=2;i--)

{

s1=(s1+m-1)%i;

if(s1==0)

s1=i;

w=a[s1-1];

for(int j=s1;j<i;j++)

a[j-1]=a[j];

a[i-1]=w;

}

}

 

2.报数:共n个人 1编号,设从第s个人报号,报到m出队

#include<iostream>

using namespace std;

void Joseph(int n, int m, int s);

int main()

{

Joseph(9,3,1);

return 0;

}

void Joseph(int n, int m, int s)

{

int i,j,w;

int s1 = s;

int a[100] = {0};

for(i = 0; i < n; i++) //n个人的序号放入数组a[]中;

{

a[i] = i + 1;

}

for(i = n; i>= 2; i--)

{

s1 = (s1+m-1)%i; //s1每次出圈人的位置

if(s1 == 0) //如果s1等于0,则说明要开始报数的人是最后一个人

{

s1 = i; //把此时变量i的值赋给s1

}

w = a[s1-1]; //把每次出圈人的序号赋给w

for(j = s1; j < i; j++)

{

a[j-1] = a[j];

}

a[i-1] = w; //把每次出圈人的序号赋给倒数第i个位置上

}

for(int k = n-1; k >= 0; k--)

cout<<a[k]<<" ";

cout<<endl;

}

3.统计一个数二进制表达中0的个数(首位1之前0不计)

#include <iostream>

using namespace std;

int fun(int num);

int main()

{

int num;

cout<<"Please enter a integer:\n";

cin>>num;

cout<<fun(num)<<endl;

return 0;

}

int fun(int num)

{

int count = 0;

int i = 0;

while (num)

{

if (num & 1)

{

count++;

}

num = num >> 1;

i++;

}

return (i-count);

}

 

4.镜像反转二进制表达式,并输出十进制值

#include<iostream>

using namespace std;

int func(int a);

main()

{

int n;

cout<<"enter:";

cin>>n;

cout<<func(n)<<endl;

}

int func(int a)

{

int val=0;

int temp;

int i;

int n=0;

int b[100];

while(a!=0)

{

temp=(a&1);

b[n++]=temp;

a=(a>>1);

}

for(i=0;i<n;i++)

val=val*2+b[i];

return val;

}

5.判断一个字符串中()是否配对

#include<iostream>

using namespace std;

bool match(char a[],int length);

int main()

{

char b[100];

int len;

bool m;

cout<<"enter:"<<endl;

gets(b);

len=strlen(b);

m=match(b,len);

if(m) cout<<"match"<<endl;

else cout<<"nonmatch"<<endl;

return 0;

}

bool match(char a[],int length)

{

char *p=a;

int count1=0;

int count2=0;

while(*p!='\0')

{

if(*p=='(') count1++;

if(*p==')') count2++;

if(count2>count1)

return false;

p++;

}

if(count1==count2)

return true;

else

return false;

}

7.查找子字符串个数

#include <iostream>

#include <string>

using namespace std;

int fun(char *str, char *substr);

int main()

{

char str[100];

char substr[10];

cout<<"输入字符串:\n";

gets(str);

cout<<"输入字串:\n";

gets(substr);

cout<<fun(str, substr)<<endl;

return 0;

}

int fun(char *str, char *substr)

{

int count = 0;

while (*str)

{

char *p = str;

char *q = substr;

while (*q)

{

if (*p == *q)

{

p++;

q++;

}

else

{

break;

}

}

if (*q == 0)

{

str = str + strlen(substr);

count++;

}

else

{

str++;

}

}

return count;

}

8.关于数组的循环移位

#include <iostream>

using namespace std;

void func(int *p, int n, int k);

void main()

{

int a[]={1,2,3,4,5};

int i;

func(a,5,2);

for(i=0;i<5;i++)

cout<<a[i]<<" ";

cout<<endl;

}

void func(int *p ,int n, int k)

{

int temp;

int i;

k=k%n;

if(k>=0)

{

while(k)

{

temp=p[n-1];

for(i=n-1;i>0;i--)

p[i]=p[i-1];

p[0]=temp;

k--;

}

}

else if(k<0)

{

k=k*(-1);

while(k)

{

temp=p[0];

for(i=1;i<n;i++)

p[i-1]=p[i];

p[n-1]=temp;

k--;

}

}

}

 

链表

#include <iostream>

#include <stdio.h>

#include <string.h>

#include <conio.h>

using namespace std;

typedef struct student

{

int data;

struct student *next;

}node;

/* 链表的创建*/

node *creat()

{

node *head,*p,*s;

int x;

int cycle=1;

head=(node*)malloc(sizeof(node));

p=head;

while(cycle)

{

cout<<"please enter a number"<<endl;

cin>>x;

if(x!=0)

{

s=(node*)malloc(sizeof(node));

s->data=x;

p->next=s;

p=s; //前一个节点的地址

}

else

cycle=0;

}

head=head->next;

p->next=NULL;

return (head);

}

void reverse(node **head)

{

node *p1,*p2,*p3;

//if(*head==NULL||*head->next==NULL) return *head;

p1=*head;

p2=p1->next;

while(p2)

{ p3=p2->next;

p2->next=p1;

p1=p2;

p2=p3;

}

(*head)->next=NULL;

*head=p1;

//return *head;

}

void main()

{

node *p;

node *head;

//int n;

head=(node*)malloc(sizeof(node));

head=creat();

//n=length(head);

p=head;

cout<<"原始链表是:";

if(head!=NULL) //原始链表的打印

while(p!=NULL)

{

cout<<p->data<<" ";

p=p->next;

}

cout<<endl;

node **q = &head;

reverse(q);

p=head;

// cout<<"链表长度为:"<<n;

/**************************************************************/

cout<<"逆置后链表是:";

if(head!=NULL) //逆置后链表的打印

while(p!=NULL)

{

cout<<p->data<<" ";

p=p->next;

}

cout<<endl;

}

#include <iostream>

#include <stdio.h>

#include <string.h>

#include <conio.h>

using namespace std;

typedef struct student

{

int data;

struct student *next;

}node;

/* 链表的创建*/

node *creat()

{

node *head,*p,*s;

int x;

int cycle=1;

head=(node*)malloc(sizeof(node));

p=head;

while(cycle)

{

cout<<"please enter a number"<<endl;

cin>>x;

if(x!=0)

{

s=(node*)malloc(sizeof(node));

s->data=x;

p->next=s;

p=s;

}

else

cycle=0;

}

head=head->next;

p->next=NULL;

return (head);

}

/*链表的测长*/

int length(node *head)

{

int n=0;

node *p;

p=head;

while(p!=NULL)

{

p=p->next;

n++;

}

return n;

}

/*链表的排序*/

node *sort(node* head, int n)

{

int i;

int j;

int temp;

node *p;

if(head==NULL||head->next==NULL)

return (head);

p=head;

for(i=1;i<n;i++)

{

p=head;

for(j=0;j<n-i;j++)

{

if(p->data>p->next->data)

{

temp=p->next->data;

p->next->data=p->data;

p->data=temp;

}

p=p->next;

}

}

return (head);

}

/*链表的逆置*/

node *reverse(node* head)

{

node *p1;

node *p2;

node *p3;

if(head==NULL||head->next==NULL)

return head;

p1=head;

p2=p1->next;

while(p2)

{

p3=p2->next;

p2->next=p1;

p1=p2;

p2=p3;

}

head->next=NULL;

head=p1;

return head;

}

/*链表插入一个节点*/

node *insert(node* head,int num)

{

node *p0,*p1,*p2;

p1=head;

p0=(node*)malloc(sizeof(node));

p0->data=num;

while((p0->data)>(p1->data)&&p1->next!=NULL)

{

p2=p1;

p1=p1->next;

}

if(p0->data<=p1->data)

{

if(head==p1) //插入的是头结点

{

p0->next=p1;

head=p0;

}

else

{

p2->next=p0; //插入的是中间结点

p0->next=p1;

}

}

else //插入的是尾结点

{

p1->next=p0;

p0->next=NULL;

}

return (head);

}

/*链表删除一个节点*/

node *del(node* head,int num)

{

node *p1,*p2;

p1=head;

while(num!=p1->data&&p1->next!=NULL)

{

p2=p1;

p1=p1->next;

}

if(num==p1->data)

{

if(head==p1)

{

head=p1->next;

free(p1);

}

else

p2->next=p1->next;

}

else

cout<<num<<"couldn't be found"<<endl;

return (head);

}

void main()

{

node *p;

node *head;

int n;

head=(node*)malloc(sizeof(node));

head=creat();

n=length(head);

p=head;

cout<<"原始链表是:";

if(head!=NULL) //原始链表的打印

while(p!=NULL)

{

cout<<p->data<<" ";

p=p->next;

}

cout<<endl;

head=reverse(head);

p=head;

cout<<"链表长度为:"<<n;

/**************************************************************/

cout<<"逆置后链表是:";

if(head!=NULL) //逆置后链表的打印

while(p!=NULL)

{

cout<<p->data<<" ";

p=p->next;

}

cout<<endl;

/**************************************************************/

head=sort(head,n);

p=head;

cout<<"排序后链表:";

if(head!=NULL) //排序后链表的打印

while(p!=NULL)

{

cout<<p->data<<" ";

p=p->next;

}

cout<<endl;

/**************************************************************/

int a;

cout<<"insert a number:"<<endl;

cin>>a;

head=insert(head,a);

p=head;

cout<<"插入后链表是:";

if(head!=NULL) //插入后链表的打印

while(p!=NULL)

{

cout<<p->data<<" ";

p=p->next;

}

cout<<endl;

/**************************************************************/

int b;

cout<<"delete number:"<<endl;

cin>>b;

head=del(head,b);

p=head;

cout<<"删除后链表是:";

if(head!=NULL) //删除后链表的打印

while(p!=NULL)

{

cout<<p->data<<" ";

p=p->next;

}

cout<<endl;

}

 

9.两个大数相加

//超大整数加法运算

//#include "stdafx.h"

#include <string>

#include<iostream>

using namespace std;

#define ln 100 //数字长度

int main(int argc, char* argv[])

{

int la = 0, lb = 0;

int A[ln];

int B[ln];

for(int l=0; l<ln; l++)

{

A[l]=0;

B[l]=0;

}

char a[ln];

cout << "输入一个高精度数(小于100位)作被加数:" << endl;

cin.getline(a, ln);

la =strlen(a);

for (int i=0; i<la; i++)

{

A[i] = int(a[la-1-i])-48;

}

char b[ln];

cout << "输入另一个高精度数(小于100位)作加数:" << endl;

cin.getline(b, ln);

lb =strlen(b);

for (i=0; i<lb; i++)

{

B[i] = int(b[lb-1-i])-48;

}

int lc;

if (la>lb)

{

lc = la;

}

else

lc = lb;

for (int j=0; j<lc; j++)

{

A[j] = A[j]+B[j];

A[j+1] = A[j+1]+A[j]/10;

A[j] = A[j]%10;

}

while (A[lc-1]>10)

{

A[lc]=A[lc-1]/10;

lc += 1;

}

cout << "相加结果:" << endl;

for (j=lc-1; j>=0; j--)

{

cout << A[j];

}

cout << endl;

return 0;

}

 

10.将字符串中的所有字母都替换成该字母的下一个字母

#include <iostream>

using namespace std;

#include <ctype.h>

#include <stdio.h>

#include <string.h>

void func(char *p);

void main()

{

char str1[20];

printf("enter:");

gets(str1);

func(str1);

puts(str1);

}

void func(char *p)

{

char ch;

while(*p)

{ ch=*p;

if(isalpha(*p)&&(*p!='z')&&(*p!='Z'))

*p=ch+1;

else if(*p='z')

*p='a';

else if(*p='Z')

*p='A';

p++;

}

}

11.回文判断

#include<iostream>

using namespace std;

bool func(int m);

void main()

{

int m;

cout<<"enter a number:"<<endl;

cin>>m;

cout<<func(m)<<endl;

}

bool func(int m)

{

int i,n=0;

i=m;

while(i)

{

n=n*10+i%10;

i/=10;

}

if(m==n)

return true;

return false;

}

#include<iostream>

using namespace std;

#include<string.h>

bool is_huiwen(char a[],int length)

{

const char *src=a;

const char *end;

end=src+length-1;

while(src<end)

{ if(*src==*end)

{ src++;end--;}

else return false;

}

return true;

}

int main()

{ int len;

char c[10];

cout<<"enter:"<<endl;

cin>>c;

len=strlen(c);

bool h;

h=is_huiwen(c,len);

if(h) cout<<"hui_wen"<<endl;

else cout<<"non_hui_wen"<<endl;

return 0;

}

12.将一个“1234的字符串转化为1234整型

#include <iostream>

#include <stdio.h>

#include <string.h>

using namespace std;

int func(char a[]);

void main()

{

char a[]={'1','2','3','4','\0'};

cout<<func(a)<<endl;

}

int func(char a[])

{

int i=0;

int sum=0;

while(a[i]!='\0')

{

sum=sum*10+(a[i]-'0');

i++;

}

return sum;

}

13.求一个二维数组每列的最小值

#include <iostream>

using namespace std;

void fun(int input[3][4], const int m, const int n, int output[4]);

int main()

{

int input[3][4] = { {21,48,86,92},

{10,23,12,69},

{46,78,49,13}};

int output[4];

fun(input, 3, 4, output);

cout<<"原二维数组是:"<<endl;

for(int i=0; i<3; i++)

{

for(int j=0; j<4; j++)

{

cout<<input[i][j]<<" ";

}

cout<<endl;

}

cout<<"每列最小值是:"<<endl;

for (int k=0; k<4; k++)

{

cout<<output[k]<<" ";

}

cout<<endl;

return 0;

}

void fun(int input[3][4], const int m, const int n, int output[4])

{

int i = 0;

int j = 0;

for (i=0; i<n; i++)

{

output[i] = input[0][i];

for (j=0; j<m; j++)

{

if (output[i] > input[j][i])

{

output[i] = input[j][i];

}

}

}

}

14.连续字符统计(如AABCCCDA2B1C3D1

#include <iostream>

#include <stdio.h>

#include <string.h>

using namespace std;

void func(char str[],int len);

void main()

{

char str[20];

int len;

cout<<"enter:";

gets(str);

len=strlen(str);

func(str,len);

}

void func(char str[], int len)

{

int count=1;

int i;

for(i=0;i<len;i++)

{

if(str[i]==str[i+1])

count++;

else

{

cout<<str[i]<<count;

count=1;

}

}

cout<<endl;

}

15.找出一个字符串中是否包含相同的子字符串(要求子串长度大于等于2

#include <iostream>

#include <string>

using namespace std;

int fun(char* str, int n)

{

char *temp = new char[n+2];

char *str2 = str;

int sum = 0;

int outsum = 0;

char* t;

for(int i = 0; i < n; i++)

{

for(int j = 2; j <= n-i; j++)

{

sum = 0;

str2 = str;

memset(temp,0,(n+2)*sizeof(char));

strncpy(temp, str+i, j);

while((t = strstr(str2,temp)) != NULL)

{

sum++;

str2 = t+j;

}

if( sum > outsum)

{

outsum = sum;

}

}

}

if(outsum == 1)

return 0;

return outsum;

}

int main()

{

char strstr[1000];

memset(strstr,0,sizeof(strstr));

char *s = strstr;

cin >> s;

int n =strlen(s);

int outsum;

outsum = fun(s,n);

cout << outsum << endl;

system("pause");

return 0;

}

16.已知:yi er san si wu liu qi ba jiu 分别对应123456789,对一段只含有这几种字符的字符串进行转

换,转换成相应的数字

如:yiersansan1233

#include <iostream>

#include <string>

using namespace std;

char* sss[9] = {"yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};

int fun(char* str)

{

int i;

int sum = 0;

int d = 0;

i = 0;

int j;

while(str[i] != '\0')

{

if(str[i] == 'y' || str[i] == 'e'|| str[i] == 'w' || str[i] == 'q' || str[i] ==

'b')

d = 2;

else if(str[i] == 'l' || str[i] == 'j')

d = 3;

else if(str[i] == 's')

{

if(str[i+1] == 'a')

d = 3;

else d = 2;

}

for(int k = 0; k < 9; k++)

if(strncmp(str+i,sss[k],d) == 0)

j = k+1;

sum = 10*sum + j;

i = i+d;

}

return sum;

}

int main()

{

char strstr[1000];

memset(strstr,0,sizeof(strstr));

char *s = strstr;

cin >> s;

int outsum;

outsum = fun(s);

cout << outsum << endl;

system("pause");

return 0;

}

 

17.删除字符串中字符个数最少的字符

#include <iostream>

#include <string>

using namespace std;

char* fun(char* str, int n)

{

int hash[256] = {0};

char *result = new char[n+1];

memset(result,0,(n+1)*sizeof(char));

for(int i = 0; i < n; i++)

{

hash[str[i]]++;

}

int min = 0x7fffffff;

for(int i = 0; i < 256; i++)

{

if(hash[i] < min && hash[i] != 0)

min = hash[i];

}

for(int i = 0,j = 0; i < n; i++)

{

if(hash[str[i]] != min)

{

result[j++] = str[i];

}

}

return result;

}

int main()

{

char strstr[1000];

memset(strstr,0,sizeof(strstr));

char *s = strstr;

cin >> s;

char *re = NULL;

re = fun(s,strlen(s));

cout << re << endl;

system("pause");

return 0;

}

 

分享到:
评论

相关推荐

    华为机试题库

    ### 华为机试题库分析 #### 题目一:电话号码验证 这段代码的主要功能是验证输入的电话号码是否符合特定格式。具体来说,它检查电话号码是否以“86”开头,并且总长度为13位,其中除了开头的“86”,其余部分都是...

    华为试题历年上机试题

    华为历年上机试题华为历年上机试题华为历年上机试题华为历年上机试题华为历年上机试题

    华为历年招聘机试题完全总结(代码全部调试通过)

    总结了华为历年来机试的所有题目,每一道题目都有完整的代码,全部实际运行跑通。

    华为历年笔试面试试题精粹.rar

    华为历年笔试面试试题精粹.rar 经典试题

    华为射频天线笔试机试题(2021年)

    这些题目涵盖了多个无线通信和电磁学的基础知识点,主要包括: 1. **电压驻波比(VSWR)**:电压驻波比是衡量传输线与负载匹配程度的指标,p=2表示存在一定的反射,但并未给出足够的信息计算具体反射系数和负载阻抗...

    华为C++机试题总结和答案,大量习题数百道

    这份资料集包含了数百道华为历年来的机试题,涵盖了许多C++编程的核心知识点。 1. **基本语法**:C++的基础包括变量定义、数据类型、运算符、流程控制(if-else, switch-case, for, while等)、函数的使用等。这些...

    华为机试题(自己整理附有个人的代码)

    个人整理的华为历年机试题目 包含一些以前的选择题 编程题 编程题目有些我全部做过 并且把个人的代码附上 有些代码是别人写的 可以对照参考

    华为机试题大全

    这份“华为机试题大全”集合了华为历年来的面试题目,旨在帮助求职者熟悉并准备华为的技术考核。这些题目覆盖了计算机科学的多个领域,包括但不限于数据结构、算法、操作系统、网络、数据库、编程语言等。 一、数据...

    华为内部笔试试题 学生学习

    这是华为公司的历年招聘试题,望大家学习参考。想进华为的话就一定要下下来看看。了解一下华为的出题方式

    华为全国研究生数学建模竞赛历年试题(04-17).7z

    这个名为"华为全国研究生数学建模竞赛历年试题(04-17).7z"的压缩包文件包含了从2004年至2017年的所有竞赛试题,为参赛者提供了宝贵的参考资料。 数学建模是一种将现实问题抽象成数学模型的过程,它涉及数学、...

    华为校招历年笔试题

    华为公司作为全球领先的信息与通信技术(ICT)解决方案提供商,其校园招聘过程备受关注,特别是笔试环节,对每一位应聘者而言都是展示个人专业能力的重要舞台。在华为校招的笔试环节中,应聘者需面对一系列与专业...

    华为历届面试笔试试题总汇

    【华为历届面试笔试试题总汇】是一个集合了华为公司历年面试及笔试环节的题目资源,对于准备应聘华为职位的求职者来说,这是一份非常有价值的学习材料。这份资料通常包含了技术类、管理类、综合能力类等多种类型的...

    华为往年试题源代码c和c++版

    描述中的“华为往年试题源代码c和c++版(部分题库)”进一步说明了这个压缩包中包含的是华为历年技术测试的部分题目,以源代码的形式呈现,意味着考生可以查看并运行代码,深入理解问题的解决思路。这部分题库可能并...

    “华为杯”全国研究生数学建模往届试题(从2012到2016)

    【历年试题】是了解竞赛趋势和学习建模技巧的重要资源。从2012年至2016年的试题中,我们可以看到历年来的问题涵盖了社会、经济、科技、环境等多个领域。这些题目不仅考察了参赛者的数学功底,还强调了对实际问题的...

    全国研究生数学建模竞赛历年试题(04-18).zip

    综上所述,“全国研究生数学建模竞赛历年试题(04-18).zip”这一资源集合,不仅是参赛者备赛的宝贵资料,对于教育工作者和数学建模爱好者也具有极高的价值。通过对历年试题的研究与练习,不仅可以提升参赛者的数学...

    华为笔试试题(史上最全)

    本文将深入探讨华为历年笔试试题的构成,以及如何备考这些题目,以便帮助有志于加入华为的牛人做好充分准备。 华为的笔试内容广泛且深入,涉及电路、模拟电路、数字电路、信号与系统、微机原理、网络和数字信号处理...

    04-20年“华为杯”研究生数学建模竞赛历届赛题.rar

    4. **历年试题分析** 这个压缩包中的历届赛题反映了不同年份社会热点和科技前沿问题,如环境科学、能源问题、网络优化、人工智能等,可帮助参赛者了解历年来的热门话题和建模方法。 5. **建模策略** 学习历届赛题...

    全国大学生数学建模竞赛历年试题

    通过研究历年试题,学生们可以了解竞赛的出题趋势,提高应对复杂问题的能力。每个题目背后都隐藏着丰富的数学思想和方法,通过深入探讨和解答,不仅能提升数学水平,还能锻炼批判性思维和创新意识,这对于未来的学习...

    2010-2013华为历年笔试题大汇总(1).pdf

    【华为历年笔试题大汇总分析】 华为作为全球领先的ICT(信息与通信技术)解决方案提供商,其招聘过程中的笔试环节往往涵盖了通信技术、软件工程、硬件设计、财经管理等多个领域,旨在全面评估候选人的专业能力和...

Global site tag (gtag.js) - Google Analytics