软件工程师-华为机试注意事项

来源:互联网 发布:艾森豪威尔总统 知乎 编辑:程序博客网 时间:2024/05/16 15:49

2.1.1 题目一

Hello world输入字符串,首字母大写其他字母小写,输出true,其他输出false

这道题需要注意:cin>>用法,逻辑其实很简单。

int a b;

cin>>a;//输入数字,回车结束

cin>>b;

cout<<a+b<<endl;

 

char s[20];

cin>>s;//输入回车、空格、TAB都结束

cout<<s<<endl;

 

char s[1000];

cin.get(s,1000);//仅回车结束,能接受空格、TAB,s在1000个长度范围内

cout<<s<<endl;

特别注意:字符串结束标志’\0’,这个很有用途,当便利字符串时结束判断位

输入:jfjlajf123实际s为:jfjlajf123\0

 

#include<string>

stringstr;

getline(cin,str); //默认回车结束,能接受空格、TAB

int len=str.length();

特别注意:string char数组的遍历方式

2.1.2 题目二

输入字符串ljij___--输出lji_-输出相同字符的首个字符,其他不输出。

此题思路是:对每个字符设置标志位,倒序遍历输入字符串,拿该字符与前面比较,若有相同则该位表示赋为false,结束该字符比较,反之赋为true,进入下一字符比较。

char *pchar=  new char[128];//字符型指针

memset(pchar,’\0’,128);//初始化

cout<<pchar<<endl;//输出该字符数组

delete[]pchar;

2.1.3 题目三

输入一个数字(>=10,即至少是个两位数),如果是个n位数,则去掉其第一位w,输出后n-1位。如:输入25,输出5

getline(cin,str);

cin>>str;

//str.erase(0,1);

2.1.4 题目四

币值有1,5,10,50,100五种,输入一个金额数字,输出使用这五种货币拼出此金额所用的最小张数。

a[]={100,50,10,5,1};

%取余/取整。

int money;

string str;

cin>>str;

money=atoi(str.c_str());

strcpy()函数的用法:

原型声明:externchar *strcpy(char* dest, const char *src);

头文件:#include<string.h>

功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间

说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

返回指向dest的指针

2.1.5 题目5

判断if语句括号是否合法。

首先遍历统计左括号、右括号个数,如果两者不相等或者有一个为0,则输出WRONG,并返回;如果两者相等,遍历字符串遇到左括号,入栈k++,遇到右括号,出栈k—(出栈时需要判断k是否为0。

2.1.6 题目6

10个学生考完期末考试评卷,划及格线满足a.及格线是10的倍数b.保证至少有60%的学生及格c.如果所有的学生都高于60分,则及格线为60。

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

     {

         cin>>score[i];

     }

输入需要注意的,亲!

首先判断是否都高于60,是就输出60,并return 0。

然后从100,90,80,70,60开始试,看看最小哪个能满足至少60%的学生及格。

2.1.7 题目7

灯n个满足1<=n<=65535。学生n个,第一个学生把号码凡是1的倍数的的电灯开关拉一下,第二个学生把号码凡是2的倍数的的电灯开关拉一下。。。。。第n个学生把号码凡是n的倍数的的电灯开关拉一下。如此下去,还有几盏灯亮着。(等开始是灭的)

bool *flag = new bool[lamp+1];

memset(flag,false,sizeof(bool)*(lamp+1));

delete[] flag;

申请动态数组。。。。不要忘记delete[]数组空间。。。。。

flag[i*j]= !flag[i*j];

bool 型变量取反

2.1.8 题目8

地铁换乘。比较难,高级题目。

图的两种表示方法:邻接矩阵存储方式

struct Graph{

     charvertex[MaxVer][4];//存储顶点

     intedges[MaxVer][MaxVer];//两点距离

     intvisited[MaxVer];

};

巧妙的利用二维矩阵对edges[MaxVer][MaxVer]赋值,然后利用Floyed(http://www.cnblogs.com/twjcnblog/archive/2011/09/07/2170306.html)算法求两点间距离。

邻接表存储方式:

/邻接表相关

//边表结构

typedef struct edgeNode

{

 inteVerIndex; //边表的顶点号

 structedgeNode *nextEdge; //指向下一边表的指针

}edgeNode; //struct edgeNode的别名为edgeNode,方便调用

 

//顶点表结构

typedef struct vertexNode

{

 intverIndex; //顶点表的顶点号

 edgeNode *firstEdge; //指向第一边表的指针

}vertexNode;

 

//顶点表构成的图的邻接表

typedef struct

{

 vertexNode adjList[VerNum]; //顶点表结构数组,总数为顶点的数目

}graphList;//将此结构体别名定义为GraphList

利用BFS宽度搜索算法求解。

2.2.9 题目9

输入一串数,以‘,’分割,输出所有数中去掉最大值、最小值以后剩下的个数。

主要是string输入的变换。

String转int: num[j++] = atoi(tempstr.c_str());

0 0
原创粉丝点击