网易笔试编程题详解
来源:互联网 发布:淘宝情侣装秋冬装 编辑:程序博客网 时间:2024/05/17 06:27
题目一 彩砖的问题
解析:在答这道题的时候,我分析出,首先是和字母的种类数有关系的,当这个种类数为2的时候,它是存在的,而且结果是2,因为BBAA与AABB,当这个种类数为3或者大于3的时候,这个时候是不存在,因为,只要第三种和前两种相邻,这个结果就是大于1的,对于种类数为0和1的情况,我都认为是0(理解错误),在这一块,我犯了错误,题目中是“最多存在一对不同颜色的相邻砖块”,也就是说包含着一对都不存在的情况,我把这点忽略,这种在脑海浮现过,只是我认为它不符合而已,所以,正确的结论是,当种类数大于2的时候,结果就是0,当种类数小于2的时候,种类数就是最后的结果
总结:在这个过程中我遇到的第一个难点就是,如何得到这个种类数,我想到的思路就是遍历字符串,将统计的结果放到一个空数组中,这个时候我想到了自己之前的做法,以大写字母的ASCII码值作为下标,但是一想这次只有26个字母,空间太浪费了,所以我打算这个数组只存储这26的字母,所以我就想到’A’对应的下标就是0,然后就想到了用字母-A
作为统计数组的下标
具体的代码如下:
#include<stdio.h>#include<stdlib.h>#include<string.h>int main(void) { char str[50]; int a[26] = {0}; int i = 0; int type = 0; gets(str); for(i = 0; i < strlen(str); i++) { a[str[i] - 'A']++; } for(i = 0; i < 26; i++) { if(a[i]) { type++; } } if(type > 2) { printf("0"); return 0; }else{ printf("%d", type); } return 0;}
题目二 01串的问题
解析:就是遍历输入的串,然后查看该字符与下一个字符是否相等,如果相等则将记录字串长度的变量(t)清零,否则t++,然后比较t与num的大小,num的作用就是记录一个最大值
总结:就是要注意一些特殊值,一种情况结束后,需要立即return
具体代码如下:
#include<stdio.h>#include<stdlib.h>#include<string.h>int main(void) { //求最长的01串 char str[50]; int i = 0; int num = 0; int t = 0; gets(str); if(strlen(str) == 0) { printf("0"); return 0; } if(strlen(str) == 1) { printf("1"); return 0; } for(i = 0; i < strlen(str) && i + 1 < strlen(str); i++) { if(str[i] != str[i+1]) { t++; }else { t = 0; } if(num < t) { num = t; } } printf("%d", num+1); return 0; }
题目三 独立的小易
解析:这个题目主要就是解一个方程,假设在吃完f个水果之后,还可以维持n天,则有x*n + n*p = d-f*x
,然后再加上f,就是这种情况下的天数,该情况就是d/x >= f
,在初次考虑的时候,我没有考虑到这样一点,只是单纯的去解了方程,在意识到之后,我又加入了对于d/x < f
情况的处理,也就是说此时的天数就是d/x
总结:在思考的时候需要全面一些,要不然就会漏掉某些情况
具体的代码如下:
#include<stdio.h>#include<stdlib.h>int main(void) { //x每天房租 f已经有的水果 d有的钱 p水果的单价 int x, f, d, p; scanf("%d", &x); scanf("%d", &f); scanf("%d", &d); scanf("%d", &p); /* 这种情况已经涵盖在下面的情况中了 if(d == 0 || d < x) { printf("0"); return 0; }*/ if(d/x < f) { printf("%d", d/x); return 0; } int money = d - f * x; int day = money / (x + p); printf("%d", day + f); return 0;}
题目四 等差数列
分析:看到这道题目的时候,我就注意到这个d,而等差数列这个就让我联想到很多,它是单调的,所以在一个有序的数列中,相邻的两个数就相差一个|d|,所以我想到的就是先给它排个序,然后相邻比较,看它们是不是相差一个d
代码如下:
#include<stdio.h>#include<stdlib.h>int main(void) { int a[50]; int n, i, j; scanf("%d", &n); for(i = 0; i < n; i++) { scanf("%d", &a[i]); } for(i = 0; i < n; i++) { for(j = i+1; j < n; j++) { if(a[i] > a[j]) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } } int d = a[1] - a[0]; for(i = 1; i < n; i++) { if(a[i+1] - a[i] != d && i+1 < n) { printf("Impossible"); return 0; } } printf("Possible"); return 0; }
感觉在做编程题目的时候还是需要读懂题,注意条件的一个划分和一些细节问题
- 网易笔试编程题详解
- 网易笔试编程题
- 网易笔试编程第二题
- 笔试编程题(网易)
- 网易笔试编程题1
- 网易笔试编程题2
- 网易2011笔试题详解
- 网易笔试编程题-java版
- 网易实习生笔试编程题 二叉树
- 网易实习生笔试编程题 比较重量
- 网易笔试编程题-混合颜料
- 网易笔试编程题-幸运的袋子
- 网易笔试编程题-不要二
- 【网易2017内推笔试编程题】
- 【Python】 网易笔试编程题(集合)
- 网易内推笔试编程题2
- 网易编程笔试题(一):合唱团
- 分享java编程题(网易笔试)
- spring AspectJ的Execution表达式
- laravel 5.4 报错SQLSTATE[42000] Syntax error or access violation 1055 'xxx' isn't in GROUP BY
- 手把手教你百度富文本编辑器的相关配置包括图片上传(for jsp)
- 剑指offer——16.合并两个排序的链表
- 关闭X-Powered-By 信息(隐藏PHP版本信息)
- 网易笔试编程题详解
- 判断出栈顺序是否正确
- CentOS 7.0修改防火墙iptables
- poj 1742 Coins【多重背包可行性问题】
- Go语言学习笔记 --- map
- 问题-你工作见到的索引是从0开始的和从1开始的...暂时叫做集合吧-求补充
- 微信支付报错“支付签名验证失败”
- Java输入输出流、过滤器、阅读器、书写器
- HDU 1753大明A+B(大数相加)(string::npos)