![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
华为oj 初级
grace_fool
这个作者很懒,什么都没留下…
展开
-
华为oj 字符串加密
这道题读起来挺拗口的,但是仔细理解下你就会发现题意总体上分为三步:1.对秘钥进行去重2.对秘钥根据字母表中剩余数字进行补齐,保证秘钥最后长度一定是26个字母3.需加密字符串根据秘钥进行加密,加密需要注意两点,一个是保持原字符串的大小写,还有一个就是加密规则,原来处于某位置上的字母变成秘钥上此位置的字母,如题目需要加密的字符串Attack AT DAWN ,第一个字母A在正常字母表中的位原创 2016-01-20 14:50:31 · 1987 阅读 · 2 评论 -
华为oj 表示数字
思路很简单,设置一个flag,没当从数字到非数字变化是就改变flag值,输出一个*就可以了!#includeusing namespace std;int main(){ char inStr[50]; int len; bool flag; gets_s(inStr); len = strlen(inStr); if (len <= 0) { return 0;原创 2016-03-09 21:02:34 · 394 阅读 · 0 评论 -
华为oj 人民币转换
测试发现我的程序还有bug,不过可以通过oj。。。#include#includeusing namespace std;int main(){ string tran1[10] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; string tran2[5] = { "拾", "佰", "仟", "万", "亿" };原创 2016-03-09 17:33:42 · 1185 阅读 · 0 评论 -
华为oj 201301 JAVA题目0-1级
有人说用“背包问题”可以解决(没有验证),因为对于动态规划还是有些许抗拒,所以还是用别的方法解决!思路如下:1.把数据分成三类,第一类,能被5整除的(包括既能被5整除又能被3整除的);第二类,能被3整除的;第三类,其它数字。2.分别算出前两类的数字和,sumj,sumk3.将第三类数字进行划分组合(我程序实现的有bug,但是能通过oj,在划分组合时我只用了一次循环,这是远远不够的,原创 2016-03-07 10:57:06 · 798 阅读 · 0 评论 -
华为oj 记票统计
比较好理解直接上代码#include#includeusing namespace std;struct candite{ char name[10]; int votecount;};int main(){ int num,invalid=0; vector in; char sname[10] = { 0 }; candite p; bool flag =原创 2016-03-07 11:09:20 · 606 阅读 · 0 评论 -
华为oj 在字符串中找出连续最长的数字串
记得好像是去年有个公司的编程题,简单题,用一个位置s,和一个最大长度maxlen,每次寻找找到大于maxlen就更新这两个值就可以了,思路很简单!#includeusing namespace std;int main(){ char in[100]; gets_s(in); int len = strlen(in); if (len == 0) { cout << 0 <原创 2016-03-07 10:08:17 · 716 阅读 · 0 评论 -
华为oj 合法IP
这题需要判断的只有输入的数字是否在0-255之间,其它错误没有,所有这样就简单了,利用格式化输入直接或去4部分的值然后进行判断就可以了#include using namespace std;int main(){ int ip1, ip2, ip3, ip4; scanf_s("%d.%d.%d.%d",&ip1,&ip2,&ip3,&ip4); if ((ip1 >= 0 &&原创 2016-03-07 10:00:27 · 317 阅读 · 0 评论 -
华为oj 密码强度等级
没有任何绕弯的地方,根据他的要求直接写就可以了,只不过代码较长,比较耗时!#include#includeusing namespace std;string getResult(int sum){ if (sum >= 90) { return "VERY_SECURE"; } else if (sum >= 80) { return "SECURE"; }原创 2016-03-07 09:54:17 · 400 阅读 · 0 评论 -
华为oj 统计大写字母个数&&求最大连续bit数
#includeusing namespace std;int main(){char in[100];int count=0;gets(in);int len=strlen(in);for(int i=0;i<len;i++){if(in[i]>='A'&&in[i]<='Z'){count++;}}cout<<count<<endl;}原创 2016-03-06 14:36:17 · 452 阅读 · 0 评论 -
华为oj 将真分数分解为埃及分数
整体思路:我们要保证所有数都是埃及分数,那么分母必然整除分子,每次埃及分数的分母为输入的数的分母除以分子(分子肯定为1),但是要注意当剩余分子为3时,需要特殊处理,程序如下。//华为oj真分数分解为埃及分数#include using namespace std;int main(){ int a=0, b=0, c=0; scanf_s("%d/%d",&a,&b); whi原创 2016-03-06 14:24:26 · 1246 阅读 · 0 评论 -
华为oj 字符串匹配
用一个数组存储每个字符出现的个数然后,然后进行判断就行!#include#includeusing namespace std;int main(){ int trans[128]; memset(trans, 0, sizeof(int)* 128); string in1, in2; cin >> in1 >> in2; for (int i = 0; i<in2.siz原创 2016-03-06 12:40:47 · 448 阅读 · 0 评论 -
华为oj 输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数
此题思路简单,就是遍历整个字符串直接进行统计就行,但是一定要注意几点:1.在获取输入的时候一定要整行获取c就是gets,c++就用getline2.输出的时候是每个数字都要换行(坑爹的)#include using namespace std;int main(){ char inStr[100]; int len,english,space,number,other;原创 2016-02-24 20:51:27 · 1215 阅读 · 0 评论 -
华为oj 寻找等差数列
本题提供两种解法:1.找到首尾之间的所有的素数形成一个数组prime,那么这个数组形成的等差数列中,公差最大的的就是这个数列首尾数字的差值,对公差从1到最大值进行循环,找到数列中公差等于上述范围的所有数列,找到到数列包含数字最多的就可以了,时间复杂度O(kn^2)。#includeusing namespace std;int prime[200];int Count = 0;vo原创 2016-03-10 10:40:57 · 1380 阅读 · 0 评论 -
华为oj 记负均正&&自守数
#includeusing namespace std;bool IsNum(int i){ int s = i*i; while (i) { if (s % 10 == i % 10) { s = s / 10; i = i / 10; } else { break; } } if (!i) { return true; } e原创 2016-03-10 11:04:39 · 326 阅读 · 0 评论 -
华为oj 多线程
#includeusing namespace std;int main(){ int count = 0; cin>>count; for(int i=0;i<count;i++) { cout<< "ABCD"; } cout<<endl; return 0;}结论:这道题,沉默不语!原创 2016-03-01 10:46:43 · 960 阅读 · 0 评论 -
华为oj 学英语
直接copy别人的感觉他的程序很直观很好理解,具体那位大神的链接忘了,勿怪!注意事项:对于什么时候加‘and’请注意!举个例子 110 ------ one hundred and ten 101 ------ one hundred and one1001 ------ one hundred one#include #include using names原创 2016-03-01 10:38:10 · 356 阅读 · 0 评论 -
华为oj 称砝码
看题目就知道本题就是经典动态规划的题目,原创 2016-02-27 11:03:01 · 528 阅读 · 0 评论 -
华为oj 字串的连接最长路径查找
这道题应该是初级中最难的了吧,这道题整体思路应该是,把每个字符串看成一个节点,这样我们要求的就是在一个有向图中两点形成的最长路径,对于这种类型的题目,可以考虑采用佛洛依德算法,因为它是查找有向图所有两点之间的路径长度,这样很容易就会找到最长的路径!!!程序如下://弗洛伊德算法求最短路径,动态规划,有待深究//dp[i,j,k]=min{dp[i,j,k-1],dp[i,k,k-1]+d原创 2016-03-11 11:05:23 · 1674 阅读 · 1 评论 -
华为oj 字符串个数统计&&数字颠倒&&字符串翻转&&字符逆序&&求int型数据在内存中存储时1的个数
同样只上程序,都是简单题#includeusing namespace std;int main(){ int in[128], count = 0; char n,temp[100]; memset(in, 0, sizeof(int)* 128); gets(temp); int len = strlen(temp); if (len <= 0) { return原创 2016-03-11 10:27:55 · 630 阅读 · 0 评论 -
华为oj 取近似值&&合并表记录&&提取不重复的整数
不上图了,程序顺序和题目对应1.要注意负数的情况处理#includeusing namespace std;int main(){ float in; cin >> in; int s = in * 10; int flag=1; if (s < 0) { flag = -flag; } s *= flag; if (flag==1) { if ((s %原创 2016-03-11 10:18:15 · 483 阅读 · 0 评论 -
华为oj 进制转换&&质数因子
利用c语言格式化输入,格式化输出#includeusing namespace std;int main(){int a;scanf("%x",&a);printf("%d",a);return 0;}#include #include using namespace std;bool isPrime(int n){int c = 0;for(int i=1;原创 2016-03-11 09:59:58 · 391 阅读 · 0 评论 -
华为oj 明明的随机数&&计算字符个数
在此提供三种解法,其实三种解法殊途同归,不就是排个序,去个重就好!1.利用map特点,插入map之后,会自动根据关键字排序,而且不会出现相同的关键字,正好满足特性#include#includeusing namespace std;int main(){ map in; int num, temp; cin >> num; for (int i = 0; i<num; i原创 2016-03-11 09:48:28 · 1844 阅读 · 0 评论 -
华为oj 字符逆序&&求解立方根&&最小公倍数
图就不上了简单了,程序依次和题目对应#includeusing namespace std;int main(){char in[100];gets(in);int len =strlen(in);for(int i=len-1;i>=0;i--){cout<<in[i];}cout<<endl;return 0;}#includeusing namespace原创 2016-03-10 20:40:49 · 316 阅读 · 0 评论 -
华为oj 等差数列&&字符统计
应该是整个oj中最简单的了吧!#includeusing namespace std;int main(){int n;cin>>n;if(n<=0){return -1;}cout<<2*n+3*n*(n-1)/2<<endl;return 0;}本题提供两个程序:算法相同只是数据结构不同一个使用的是结构体,一个使用的是map整体思路需要统计出每个字符原创 2016-03-10 20:23:27 · 388 阅读 · 0 评论 -
华为oj 整形数组合并
将两组数合并到一组,然后进行排序,在输出的时候去重就行!!!#include#includeusing namespace std;int main(){ int num1, num2, out[100],temp; cin >> num1; for (int i = 0; i<num1; i++) { cin >> temp; out[i] = temp; } c原创 2016-03-06 12:27:22 · 350 阅读 · 0 评论 -
华为oj 计算字符串的相似度
采用递归的方式,每次返回三种操作的最小值,截止条件就是当两个字符串有一个为空的时候!!!#include #include using namespace std;int Min(int x,int y){ return (x>y) ? y:x; }int StringDistance(string A,int pa,int lenA,string B,int pb,int l原创 2016-03-06 11:18:18 · 642 阅读 · 0 评论 -
华为oj iNOC产品部--完全数计算
直接上程序没啥难的!#include using namespace std;bool Perfect(int val){ int ret = 0; if (val == 1) { return 0; } for (int i = 2; i <= val / 2; i++) { if (val % i == 0) { ret += i; } } i原创 2016-03-02 13:32:55 · 682 阅读 · 0 评论 -
华为oj iNOC产品部-杨辉三角的变形
此题提供三种方法,第一种,一开始就能想到的,设置一个足够大的数组存储生成的杨辉三角,然后进行判断就行,上代码#includeusing namespace std;int main(){ int n; int in[20][40],out=-1; memset(in, 0, sizeof(int)* 800); cin >> n; in[0][n-1] = 1; in[n -原创 2016-03-02 11:37:39 · 1241 阅读 · 0 评论 -
华为oj 名字漂亮度
此题目要计算漂亮度,根据题意,漂亮度要尽可能的大,而且每个字母的漂亮度不同,范围是[1,26],那么怎么分配者[1,26]的权重能使最后的值最大呢?把出现次数多的给权重大就解决了呗! 举个例子: zhangsan 字母 a g h n s z 次数 2 1 1 2 1 1很显然a和n都出现两次其他出现一次,那最后的原创 2016-01-13 22:02:31 · 344 阅读 · 0 评论 -
华为oj 图片整理
这道题很简单,利用c++中的sort直接排序就好,话不多说,上代码#include<iostream>#include<algorithm>using namespace std;int main(){ char inStr[1024]; int len; //输入 gets(inStr); len=strlen(inStr); //非法判断原创 2016-01-13 20:54:27 · 375 阅读 · 0 评论 -
华为oj 输出单向链表中倒数第k个结点
终于到这道题了,这是俺们那年考研数据结构最后一道题!思路:设置相距为k的两个指针,当后一个指针指向NULL 时,前面的指针就指向了倒数第K个,程序如下:#include using namespace std;struct ListNode{ int m_nKey; ListNode* m_pNext;};int main(){ int count, k, n原创 2016-03-01 11:23:44 · 338 阅读 · 0 评论 -
华为oj 合唱队
上一篇文章 说华为oj 烂,还有一部分就是,难度分配不合理,这道题虽然不是很难,但也绝不应该放在初级的题目中。题目如下解析:如果没做过或者刚接触动态规划,这道题还是比较有难度的,对于题目刚开始比较费解,这道题就是找一个数列,先从小到大,再从大到小,要计算最少需要几位同学出列,原创 2016-01-10 20:41:17 · 482 阅读 · 0 评论 -
华为oj 字符串最后一个单词的长度
计算了一下,前前后后大概大概3个多月总算是把华为oj,初级中级的所有题目全部刷完了,先说说感受吧,在做的过程中其实一直想说一个字“烂”,题目描述不清晰,结果输出描述不清晰,测试用例很少,但是坚持下来了就会有收获,中间其实有很多时候想停下来的,但是还是那句话,既然做,就做好它吧!建议所有准备刷华为oj的同学们,先思考题目,有了整体思路,在看看底下的评论,有很多注意事项,之后会不定期地上传自己的一些程原创 2016-01-07 22:53:52 · 518 阅读 · 0 评论 -
华为oj 判断两个IP是否属于同一子网
这道题,如果假设输入的ip一定是**.**.**.**这种格式的话,可以采用格式化输入进行获取,对于合法性判断,保证ip每一部分都是大于等于0,小于等于255,就好对于子网掩码判断能难一点,需要保证前面的都是1,后面的都是0,直接上代码:#includeusing namespace std;int main(){ int ip1[4], ip2[4], subnet[4], fla原创 2016-01-24 18:59:23 · 1366 阅读 · 0 评论 -
华为oj 蛇形矩阵
对于这种矩阵的输出,其实就是找规律而已,没有什么特殊的解法,你能看出规律,就能解出来,这道题我想出了两种解法:脑残版(嘿嘿)、标准版在说算法之前,必须再次强调,注意输出格式,此题的输出格式,每行元素之间有空格,每行最后一个元素后边有换行。现在说说我想出的脑残版思路:其实如果单纯的只是找规律我们可以看出,第一行,从第一个元素开始,之后分别差3-1=2,6-3=3,10-6=4,15-10原创 2016-01-18 11:03:16 · 474 阅读 · 0 评论 -
华为oj 字符串加解密
对英文字符,我们其实可以把它看成26进制,即对应0-25,这样在加密的时候把算出的值对26取余就可以了,但是要注意一下大小写字母变换,举个例子小写字母c,那么c对应的值是‘c’-'a'=2,加密时,2+1+‘A’,就转换成了加密后大写字母,'D',但是到'z'会出现问题,转换不到‘A’,所以其对26取余。对于解密字符串,就是减掉1,这同样会有问题,即‘a’的时候,具体怎么转换请看程序。原创 2016-01-17 21:53:43 · 396 阅读 · 0 评论 -
华为oj 输入n个整数,输出其中最小的k个
没有难度,但是请注意输出格式!#include #include#includeusing namespace std;int main(){ int m, n, i, b; vectora; cin >> m >> n; for (i = 0; i<m; i++) { cin >> b; a.push_back(b); } sor原创 2016-03-02 13:45:27 · 312 阅读 · 0 评论 -
华为oj 找出字符串中第一个只出现一次的字符
利用数组对应字符,很好用,它的原理#include #include using namespace std;int main(){ int count[256] = { 0 }; string s; cin >> s; for (int i = 0; i < s.size(); i++) { count[(int)s[i]]++; } //再次遍历从头到尾原创 2016-03-02 14:17:23 · 351 阅读 · 0 评论 -
华为oj 查找组成一个偶数最接近的两个素数
很简单,没什么可说#include#includeusing namespace std;bool prime(int a){ for (int i = 2; i*i <= a; i++) { if (a%i == 0) { return false; } } return true;}int main(){ int num, prime1 = 0,原创 2016-03-02 14:27:14 · 556 阅读 · 0 评论 -
华为oj 超长正整数相加
大数相加,主要是处理进位位就可以了,就按加法正常处理就行,程序比较简单#includeusing namespace std;int main(){ char inStr1[100], inStr2[100], outStr[150]; int len1, len2, pos,s,t,i,j,k; cin >> inStr1 >> inStr2; len1 = strlen(原创 2016-03-04 13:47:31 · 313 阅读 · 0 评论