华为上机题汇总(二十)
来源:互联网 发布:董秘助手软件下载 编辑:程序博客网 时间:2024/05/19 05:05
华为上机题汇总(二十)
注:编译环境为Visual Studio 2012,答案仅供参考。
目录
- 华为上机题汇总二十
- 目录
- 第九十六题
- 第九十七题
- 第九十八题
- 第九十九题
- 第一百题
第九十六题
96 . 给分数的循环节加括号
两个整数相除,将结果用字符串返回。如果是循环小数,将循环的位用括号括起来。
输入:1 3
输出:0.(3)
输入 1 7
输出 0.(142857)
#include <iostream>#include <string>using namespace std;void div(int a, int b, string &result){ if (!b) return; int c = a / b; a %= b; result = to_string(c); if (!a) return; result.push_back('.'); string tmp; bool flag = 0; while (a) { a *= 10; c = a / b; a %= b ; int pos = tmp.find(c +'0'); if (pos >= 0) { flag = 0; int tmp_a = a, tmp_b = b, tmp_c; string s; for (unsigned i = pos + 1; i < tmp.size(); i++) { tmp_a *= 10; tmp_c = tmp_a / tmp_b; tmp_a %= tmp_b; s.push_back(tmp_c); if (tmp[i] != tmp_c + '0') { flag = 1; break; } } if (!flag) { result += string(tmp.begin(),tmp.begin()+pos); result.push_back('('); result += string(tmp.begin()+pos,tmp.end()); result.push_back(')'); return; } } tmp.push_back(c + '0'); } result += tmp;}int main(){ int a, b; string s; cin >> a >> b; div(a,b,s); cout << s << endl; return 0;}
第九十七题
97.任何一个正整数m立方可写成m个连续奇数之和,m(0-100)
输入:6
输出:32+33+35+37+39+41
#include <iostream>#include <vector>using namespace std;void convert(int m, vector<int> &result){ int tmp = m * m; for (int i = tmp - m + 1; i < tmp + m; i += 2) { result.push_back(i); }}int main(){ int m; vector<int> result; cin >> m; convert(m,result); for (unsigned i = 0; i < result.size(); i++) { cout << result[i]; if (i != result.size()-1) cout << "+"; } cout << endl; return 0;}
第九十八题
98.变形的杨辉三角形
1 1 1 1 1 2 3 2 1 1 3 6 7 6 3 1 1 4 10 16 19 16 10 4 1
每个数是上行,左右3个数之和,不存在为0,求第n行第一个偶数出现的位置,没有输出-1
#include <iostream>#include <vector>using namespace std;int findEven(int n){ int m = 2*n-1; vector<int> tmp(m,0); vector<vector<int> > v(n,tmp); v[0][n-1] = 1; for (int i = 1; i < n; i++) { for (int j = 0; j < m; j++) { v[i][j] = v[i-1][j]; if (j > 0) v[i][j] += v[i-1][j-1]; if (j < m-1) v[i][j] += v[i-1][j+1]; } } for (int i = 0; i < m; i++) { if (v[n-1][i] % 2 == 0) { return i + 1; } } return -1;}int main(){ int n; cin >> n; cout << findEven(n) << endl; return 0;}
第九十九题
99.描述:有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙。下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS。如果单词中包含有重复的字母,只保留第1个,其余几个丢弃。现在,修改过的那个单词死于字母表的下面,如下所示:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
T R A I L B Z E S C D F G H J K M N O P Q U V W X Y
上面其他用字母表中剩余的字母填充完整。在对信息进行加密时,信息中的每个字母被固定于顶上那行,并用下面那行的对应字母一一取代原文的字母(字母字符的大小写状态应该保留)。因此,使用这个密匙,Attack AT DAWN(黎明时攻击)就会被加密为Tpptad TP ITVH。请实现下述接口,通过指定的密匙和明文得到密文。详细描述:接口说明:
输入:先输入key和要加密的字符串
输出:返回加密后的字符串
样例输入:
nihao
ni
样例输出: le
#include <iostream>#include <string>using namespace std;bool isInStr(const string &s, char c){ for (unsigned i = 0; i < s.size(); i++) { if (toupper(c) == s[i]) { return true; } } return false;}char convert(char c, const string &kt){ int flag = isupper(c); c = toupper(c); char ck = kt[c - 'A']; return flag ? ck : ck + 'a' - 'A';}void code(const string &key, const string &s, string &result){ string kt; for (unsigned i = 0; i < key.size(); i++) { if (!isalpha(key[i])) continue; if (!isInStr(kt,key[i])) { kt.push_back(toupper(key[i])); } } for (char c = 'A'; c <= 'Z'; ++c){ if (!isInStr(kt,c)) { kt.push_back(c); } } for (unsigned i = 0; i < s.size(); i++) { if (isalpha(s[i])) { result.push_back(convert(s[i],kt)); } else { result.push_back(s[i]); } }}int main(){ string key,input,result; getline(cin,key); getline(cin,input); code(key,input,result); cout << result << endl; return 0;}
第一百题
100.名字的漂亮度=26*字母个数最多的+25*字母个数其次的+24*字母个数再其次的(忽略大小写)
整数N,字符串个数
N个字符串
输出N个字符串漂亮度
注:这道题题意不明确,没有说是乘以字母还是字母个数,如果乘字母的话是乘字符本身(大写还是小写),还是字符在字母表中的顺位,所以这里就按字母个数来处理
#include <iostream>#include <string>#include <vector>#include <algorithm>#include <functional>using namespace std;int pretty(const string &s){ vector<int> v(26,0); for (unsigned i = 0; i < s.size(); i++) { if (isalpha(s[i])) { v[toupper(s[i]) - 'A']++; } } sort(v.begin(),v.end(),greater<int>()); int sum = 0; for (int i = 0; i < 3; i++) { sum += (26-i)*v[i]; } return sum;}int main(){ int n; string s; cin >> n; cin.get(); while (n--) { getline(cin,s); cout << pretty(s) << endl; } return 0;}
- 华为上机题汇总(二十)
- 华为上机题汇总(十)
- 华为上机题汇总(二)
- 华为上机题汇总(二十一)
- 华为上机题汇总(二十二)
- 华为上机题汇总
- 华为上机题汇总(一)
- 华为上机题汇总(三)
- 华为上机题汇总(四)
- 华为上机题汇总(五)
- 华为上机题汇总(六)
- 华为上机题汇总(七)
- 华为上机题汇总(八)
- 华为上机题汇总(九)
- 华为上机题汇总(十一)
- 华为上机题汇总(十二)
- 华为上机题汇总(十三)
- 华为上机题汇总(十四)
- poj 2386 (Lake Counting)
- 【ArcGis】环境搭建,一次配置,终身无忧
- 图结构练习——判断给定图是否存在合法拓扑序列
- 修改于《用抛物线的点实现HTC Vive瞬移系统》,亲测可用
- 图结构练习——BFSDFS——判断可达性
- 华为上机题汇总(二十)
- 五大常用算法思想
- AndrewNG-MachineLearning-Week1
- Handle机制详解
- poj 1401Factorial
- ffmpeg 的编译选项
- POJ 2342 Anniversary party树形dp
- PAT.1049. Counting Ones (30)
- mongodb命令批量插入json文件数据