华为上机题汇总(十)
来源:互联网 发布:php 信息录入查询系统 编辑:程序博客网 时间:2024/06/05 16:19
华为上机题汇总(十)
注:编译环境为Visual Studio 2012,答案仅供参考。
目录
- 华为上机题汇总十
- 目录
- 第四十六题
- 第四十七题
- 第四十八题
- 第四十九题
- 第五十题
第四十六题
46.在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。输出的单词之间使用一个“空格”隔开,最后一个单词后不加空格。
要求实现函数:
void my_word(charinput[], char output[])
【输入】 char input[], 输入的字符串
【输出】 char output[],输出的字符串
【返回】 无
#include <iostream>#include <string>#include <list>using namespace std;bool isLetter(char c){ return (c >= 'a' && c <= 'z');}void my_word(char *input,char* output){ list<string> v; while (*input != '\0') { if (!isLetter(*input)) { input++; continue; } char *ahead = input; while (*ahead != '\0' && isLetter(*ahead)) { ahead++; } string tmp(input,ahead); auto b = v.begin(); bool flag = true; while (b != v.end()) { if ((*b).size() < tmp.size()) { break; } if ((*b).size() == tmp.size()) { if (*b == tmp) { flag = false; break; } } b++; } if (flag) v.insert(b, tmp); input = ahead; } auto b = v.begin(); while ( b != v.end()) { for (unsigned j = 0; j < (*b).size(); j++) { *output++ = (*b)[j]; } b++; if (b != v.end()) { *output++ = ' '; } } *output = '\0';}int main(){ char input[100],output[100]; cin.getline(input,100); my_word(input, output); cout << output << endl; return 0;}
第四十七题
47.数组中数字都两两相同,只有一个不同,找出该数字:
#include <iostream>using namespace std;int findDiffence(int a[], int n){ int sum = 0; for (int i = 0; i < n; i++) { sum ^= a[i]; } return sum;}int main(){ int a[] = {2,8,5,4,5,2,8}; cout << findDiffence(a,7) << endl; return 0;}
第四十八题
48.数组中数字两两相同,有两个不同,找出这两个
#include <iostream>using namespace std;int findDiffence(int a[], int n){ int sum = 0; for (int i = 0; i < n; i++) { sum ^= a[i]; } return sum;}void findTwoDiffence(int a[], int n, int &result1, int &result2){ int *tmp1 = new int[n], n1 = 0; int *tmp2 = new int[n], n2 = 0; int sum = 0; for (int i = 0; i < n; i++) { sum ^= a[i]; } int cmp = sum & a[0]; for (int i = 0; i < n; i++) { if ((sum & a[i]) == cmp) { tmp1[n1++] = a[i]; } else { tmp2[n2++] = a[i]; } } result1 = findDiffence(tmp1,n1); result2 = findDiffence(tmp2,n2); delete []tmp1; delete []tmp2;}int main(){ int a[] = {21,18,35,4,35,21,18,6}; int result1, result2; findTwoDiffence(a,8,result1,result2); cout << result1 << " " << result2 << endl; return 0;}
第四十九题
49.统计数字出现的次数,最大次数的统计出来
举例:
输入:323324423343
输出:3,6
#include <iostream>#include <string>using namespace std;int main(){ string s; cin >> s; int a[10]; for (int i = 0; i < 10; i++) { a[i] = 0; } bool flag = true; for (unsigned i = 0; i < s.size(); i++) { if (s[i] < '0' || s[i] > '9') { flag = false; cout << "ERROR" << endl; break; } a[s[i] - '0']++; } if (!flag) return 0; int max = a[0]; for (int i = 1; i < 10; i++) { if (a[i] > max) { max = a[i]; } } for (int i = 0; i < 10; i++) { if (a[i] == max) { cout << i << "," << a[i] << endl; } } return 0;}
第五十题
50.字符串首字母转换成大写
举例:
输入:this is a book
返回:This Is A Book
bool isLetter(char c){ return (c >= 'a' && c <= 'z');}void convert(char *input, char *output){ while (*input != '\0') { if (!isLetter(*input)) { *output++ = *input++; continue; } *output++ = toupper(*input++); while (*input != '\0' && isLetter(*input)) { *output++ = *input++; } } *output = '\0';}int main(){ char input[100],output[100]; cin.getline(input,100); convert(input,output); cout << output << endl; return 0;}
1 0
- 华为上机题汇总(十)
- 华为上机题汇总(二十)
- 华为上机题汇总
- 华为上机题汇总(一)
- 华为上机题汇总(二)
- 华为上机题汇总(三)
- 华为上机题汇总(四)
- 华为上机题汇总(五)
- 华为上机题汇总(六)
- 华为上机题汇总(七)
- 华为上机题汇总(八)
- 华为上机题汇总(九)
- 华为上机题汇总(十一)
- 华为上机题汇总(十二)
- 华为上机题汇总(十三)
- 华为上机题汇总(十四)
- 华为上机题汇总(十五)
- 华为上机题汇总(十六)
- 第2章 单例模式
- poj1416 Shredding Company
- String to Integer_Leetcode_#8
- NHibernate关联对象多表查询
- 数据结构实验之查找六:顺序查找
- 华为上机题汇总(十)
- java 时间与字符串之间的转换
- html 自定义弹框效果
- javascript高级程序设计读书笔记--DOM总结
- 89-003-1 svn 通过命令行实现版本文件控制
- Java网络爬虫小试
- 正则化及正则化项的理解
- Android Inline Hook
- 上下拉伸图片-第三方开源-PullToZoomListViewEx 实现阻尼效果