目录

  • 第一题
    • 题意
    • 思路
    • 代码
  • 第二题
    • 题意
    • 思路
    • 代码
  • 第三题
    • 题意
    • 思路
    • 代码

笔试共有3道编程题,分别为100分、200分、300分,两个小时。以下内容的编写全凭记忆和个人理解,如有什么不对的地方,希望大家见谅。

第一题

题意

给出一个字符串,由许多子串组成,每个子串长度都是9,如果子串的第一位是0,就将该子串反序输出,如果子串的第一位是1,就将该子串正序输出。

思路

没啥说的,签到题,暴力就ok,可是我代码写的太丑了。。。

代码

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<string>
#include<map>
#include<queue>
#include<stack>using namespace std;char s[500];int main()
{int n;while(scanf("%d",&n)!=EOF){scanf("%s",s);int len = strlen(s);s[len]='1';len++;int start = 1;int end = 1;int rev = 0;int flag = 0;int str_num = 0;for(int i=0;i<len;){if(s[i] == '0'){if(flag == 0){rev = 1;flag = 1;start = i+1;i=i+9;}else{flag = 0;end = i-1;if(str_num == 0)str_num = 1;elseprintf(" ");if(rev == 1){for(int j = end; j>=start; --j)printf("%c",s[j]);}else{for(int j = start; j<=end; ++j)printf("%c",s[j]);}}}else if(s[i] == '1'){if(flag == 0){rev = 0;flag = 1;start = i+1;i=i+9;}else{flag = 0;end = i-1;if(str_num == 0)str_num = 1;elseprintf(" ");if(rev == 1){for(int j = end; j>=start; --j)printf("%c",s[j]);}else{for(int j = start; j<=end; ++j)printf("%c",s[j]);}}}else++i;}printf("\n");}return 0;
}

第二题

题意

一个蜜蜂,最开始在原点,要去五个其他位置采蜜,求采完回到原点的最短路径。

思路

我写了一个特别丑的暴力,真的不能再丑了。觉得写一个全排列或者搜索能好看一点。需要注意的是最后输出的时候,要把答案减0.5,因为.0lf会四舍五入,而题中要求截断小数部分。

代码

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<string>
#include<map>
#include<queue>
#include<stack>using namespace std;double x[10],y[10];
double edge[10][10];double calc_dis(double x1,double y1,double x2,double y2)
{double tmp1 = (x1-x2)*(x1-x2);double tmp2 = (y1-y2)*(y1-y2);return sqrt(tmp1+tmp2);
}int main()
{while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf",&x[1],&y[1],&x[2],&y[2],&x[3],&y[3],&x[4],&y[4],&x[5],&y[5])!=EOF){x[0]=y[0]=0;for(int i=0;i<=5;++i)for(int j=0;j<=5;++j)edge[i][j]=edge[j][i]=calc_dis(x[i],y[i],x[j],y[j]);double ans = 99999999999;for(int i=1; i<=5; ++i)for(int j=1; j<=5; ++j)for(int k=1; k<=5; ++k)for(int l=1; l<=5; ++l)for(int p=1; p<=5; ++p){if(i==j || i==k || i==l || i==p ||j==k || j==l || j==p ||k==l || k==p ||l==p)continue;double tmp = edge[0][i] + edge[i][j] + edge[j][k] + edge[k][l] + edge[l][p] +edge[0][p];ans = min(ans, tmp);}printf("%.0lf\n",ans-0.5);}return 0;
}

第三题

题意

有个网格,在某些格子上有水果,我们可以横、竖、对角(2种)切水果,问最少几刀可以把水果切没。

思路

我觉得是搜索,然后写啊写,到最后结束了知道’\\\'是续行符,我有一行代码由于自己写了注释,咋都运行不了,我都蒙了。我的搜索太丑了,可以再优雅点,有些地方也能记忆化一下,我也不知道会不会TLE,会不会WA,1个半小时都在调试。。。

代码

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<string>
#include<map>
#include<queue>
#include<stack>using namespace std;int x[60],y[60];
int vis[60];int vis_num;
int max_n=40;
int max_m=50;
int n;
int end_ans;int calc_cut(int start, int style)
{printf("start:%d %d style=%d\n",x[start],y[start],style);int ans=0;if(style == 1){for(int i=1;i<=n;++i)if(x[i]==x[start] && vis[i]==0)ans++;}if(style == 2){for(int i=1;i<=n;++i)if(y[i]==y[start] && vis[i]==0)ans++;}if(style == 3){for(int i=1;i<=n;++i){if((x[i]-x[start])==(y[i]-y[start]) && vis[i]==0){ans++;//printf("i=%d %d %d\n",i,x[i],y[i]);}}}if(style == 4){//cout<<"---------"<<endl;for(int i=1;i<=n;++i)if((x[i]-x[start])==(y[start]-y[i]) && vis[i]==0){ans++;//printf("i=%d %d %d\n",i,x[i],y[i]);}}return ans;
}int cut[10];
void dfs(int start, int vis_num, int cut_times)
{if(vis_num >= n)return ;printf("----------------------------\n");cut[1] = calc_cut(start,1);// ---cut[2] = calc_cut(start,2);// |||cut[3] = calc_cut(start,3);// \\\cut[4] = calc_cut(start,4);// int max_cut=cut[1];int max_i=1;for(int i=1;i<=4;++i)if(cut[i]>max_cut){max_cut=cut[i];max_i=i;}//printf("start=%d max_cut=%d cut_i=%d cut_times=%d vis_num=%d\n",start,max_cut,max_i,cut_times,vis_num);//printf("%d %d %d %d\n\n\n",cut[1],cut[2],cut[3],cut[4]);//printf("%d\n",max_i);if(max_i == 1){int next;for(int i=1;i<=n;++i)if(x[i]==x[start] && vis[i]==0){vis[i]=1;vis_num++;}elsenext=i;if(vis_num == n)end_ans = min(end_ans, cut_times);elsedfs(next, vis_num, cut_times+1);}if(max_i == 2){int next;for(int i=1;i<=n;++i)if(y[i]==y[start] && vis[i]==0){vis[i]=1;vis_num++;}elsenext=i;if(vis_num == n)end_ans = min(end_ans, cut_times);elsedfs(next, vis_num, cut_times+1);}if(max_i == 3){int next;for(int i=1;i<=n;++i)if((x[i]-x[start])==(y[i]-y[start]) && vis[i]==0){vis[i]=1;vis_num++;}elsenext=i;if(vis_num == n)end_ans = min(end_ans, cut_times);elsedfs(next, vis_num, cut_times+1);}if(max_i == 4){//printf("--------------------\n");int next;for(int i=1;i<=n;++i)if((x[i]-x[start])==(y[start]-y[i]) && vis[i]==0){vis[i]=1;vis_num++;}elsenext=i;if(vis_num == n)end_ans = min(end_ans, cut_times);elsedfs(next, vis_num, cut_times+1);}return ;
}int main()
{while(scanf("%d",&n)!=EOF){for(int i=1;i<=n;++i)scanf("%d%d",&x[i],&y[i]);memset(vis,0,sizeof(vis));end_ans=1234567890;dfs(1, 0, 1);printf("%d\n", end_ans);}return 0;
}

华为2019暑期实习笔试题相关推荐

  1. 微软2019暑期实习笔试题

    微软2019招暑期实习生的编程题 问题一:  [玻璃球游戏] 一个队伍中N个人从1到N编号,N个人之间的连线方式如下:编号为K的人和编号为J的人相连(J exactly divides K),玻璃球可 ...

  2. 2014.3.29阿里巴巴暑期实习笔试题分析

    參考:http://blog.csdn.net/iloveyoujelly/article/details/22941531 以下中的[分析]是我给出的. 2014.3.29阿里巴巴暑期实习笔试题分析 ...

  3. 招商银行信用卡2019届实习笔试题

    招商银行信用卡2019届实习笔试题 题目表述:如图 思路:有向图中找回环.(具体方法和原理可以参考相关博客)同时标记那些指向回环的顶点.全部的顶点去掉被标记的顶点,输出就是答案了.完全按照题目中的提示 ...

  4. 2022暑期实习笔试题总结(网易,华为,360,美团)

    暑期投的比较晚,总结一下目前做过的一些笔试题 网易0327 题目:传送门 解析:传送门好像没有第三题 总结: 第一题不难,想的比较复杂,看到很多人说枚举就可以做,本人非要在做题的时候想一个" ...

  5. 联发科2022暑期实习笔试题

    笔试题一共八道,第一道是根据门电路写逻辑表达式.第二个是根据逻辑门和触发器连接图和给定信号的波形,补全波形.第三个记不清了.第四个是智力推理题,难度很小.第五个是描述做过的项目.第六个是脚本编程题.第 ...

  6. 19年 招行暑期实习笔试题有感!!

    昨晚把招行的实习笔试做了,1题卡了,2 ,3 AC了 因此特来总结一发,方便自己以后复习 1.发巧克力:依次给N个人发总数为N块巧克力,按照学号顺序给学生发巧克力,(数量随机,但是至少保证一快,因此后 ...

  7. 招商银行信用卡中心(信息技术部)暑期实习笔试题

    时间:4月11日晚18:00-19:30 地点:东华大学 试卷:(拿到卷子,扫了一眼,持续懵逼中) 第一部分选择题: 1.操作系统进程相关的,2.哈夫曼树,3.哪个排序初始状态对系统系能没影响(差不多 ...

  8. 2021.4.11 字节跳动实习笔试题---情报解密

    2021.4.11 字节跳动实习笔试题-情报解密 题目内容 题目内容: 给你一个字符串,该字符串中有数字,字母(字母只有大写字母)以及一些其他的字符(例如:%,.等),如果首字母为字母或者数字的话,就 ...

  9. C语言单链表实现FCFS算法,2014腾讯实习笔试题

    2014腾讯实习笔试题 1. 关于二叉树,下面说法正确的是() A. 对于N个节点的二叉树,其高度为nlog2n; B. 一个具有1025个节点的二叉树,其高度范围在11~1025之间 C. 二叉树的 ...

最新文章

  1. 轻松自动化---selenium-webdriver(python) (四)
  2. RedHat企业版的安装(一)
  3. Anaconda+用conda创建python虚拟环境
  4. 外卖这个筐,阿里美团是做“帮主”还是做“保姆”?
  5. 在机器学习中,怎么对超参数Hyper parameter优化?我总结了以下常见的方法
  6. 文献学习(part15)--Subspace Clustering via Good Neighbors
  7. MSN8.0经常出现连接错误,如何解决?
  8. Error occurred while trying to proxy request
  9. Mysql数据库的几大优势
  10. 如何在Timeline中创建自定义轨道?
  11. layout_gravity与gravity的区别
  12. Spring使用java代码配置Web.xml进行访问service
  13. 基于Python的数据分析
  14. html网页实现查询功能实现,CSS与媒体查询实现网页导航功能(附代码)
  15. [python案例]金融知识图谱构建流程
  16. Python9--面向对象编程
  17. 申宝股票-大盘缩量调整
  18. “时间的朋友”2017跨年演讲全回顾
  19. 2.try(){}语法含义及用法
  20. 木材材积表快速计算器_木材材积表计算器

热门文章

  1. ustc小道消息20220107
  2. 那年的12月,那些悟与思2018-12-23
  3. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170320
  4. grldr 和 grldr.mbr 区别
  5. linux编程-open函数和write函数实现copy命令
  6. 构建linux根文件系统
  7. 成员函数和友元函数实现一元运算符重载
  8. python 判断是否是int/string/类型的函数
  9. 主题:log4j详解与实战
  10. ubuntu 终端内查找/搜索