2014华为武汉上机试题一:手机电池余量
来源:互联网 发布:unity3d 反射材质 编辑:程序博客网 时间:2024/04/30 05:15
1. 手机电池余量
描述: 自从有了智能手机,时刻都要关心手机的电量。你的任务很简单,用程序打印符号来表示当前手机的电量。
用10行和10列来表示电池的电量,同时在外围加上边框,每一行表示10%的电量。
假设还有60%的电量,则显示如下:
+----------+
|----------|
|----------|
|----------|
|----------|
|++++++++++|
|++++++++++|
|++++++++++|
|++++++++++|
|++++++++++|
|++++++++++|
+----------+
运行时间限制: 无限制
内存限制: 无限制
输入: 多组测试数据,第一行为测试数据组数N(N<10),紧接着是N行,每行一个数,表示电量,这个数值可能是0,10,20 ,30,40,50,60,70,80,90,100
输出: 每组数据输出一个电池的电量,每组数据之间用15个“=”隔开
样例输入: 2
50
0
//通过华为测试
- #include <iostream>
- #include <string>
- using namespace std;
- int main()
- {
- string str1="+----------+";
- string str2="|----------|";
- string str3="|++++++++++|";
- string str4="===============";
- int n,a[10];
- cin >> n ;
- int i,j;
- for(i=0;i<n;i++)
- cin >> a[i];
- for(j=0;j<n;j++)
- {
- cout << str1 <<endl;
- for(i=0;i<10-a[j]/10;i++)
- cout << str2 << endl;
- for(i=0;i<a[j]/10;i++)
- cout << str3 << endl;
- cout << str1 <<endl;
- cout << str4 << endl;
- }
- return 0;
- }
//C
//2014华为武汉上机试题一:手机电池余量
#include<stdio.h>
void printf_fun(int count)
{
int i;
int n = count/10;
printf("+----------+\n");
for(i=0;i<10-n;i++)
{
printf("|----------|\n");
}
for(i=0;i<n;i++)
{
printf("|++++++++++|\n");
}
printf("+----------+\n");
}
int main(void)
{
int N,count[10]={0};
int i;
scanf("%d", &N);
for(i=0;i<N;i++)
{
scanf("%d", &count[i]);
}
for(i=0;i<N;i++)
{
printf_fun(count[i]);
printf("===============\n");
}
return 0;
}
2:2014华为武汉上机试题二:姓名的夫妻相
在中国,形容夫妻恩爱的词汇中,大家用的比较多的就是“夫妻相”。所谓“夫妻相”,就是两个人看上去比较般配,长相、身材等某些方面有一定的相似度。本题则另辟蹊径,从人的姓名维度,以字母重复个数来寻找最具“夫妻相”的人。
题目中预先给定一组女士的姓名拼音。输入男士的姓名拼音(拼音中间可以有空格,字母全部小写),依预先给定姓名拼音的先后遍历所有姓名,输出字母重复数最多的女士姓名。
规则1:如果字母重复数最多的女士有多位相同,则以最先匹配的女士做为最具“夫妻相”的人选。
规则2:人名中的相同字母,按重复一次处理。例如:li ling与li lei 重复的字符个数为2,而不是4。
预置女士名单(先后循序必须保证):
"wang fei",
"zhang man yu",
"zhang zhi yi",
"li li",
"li xiao man",
"li yu cun",
"yang ni",
"xiao tong",
"li lei",
"zhang san"
运行时间限制: 无限制
内存限制: 无限制
输入: 输入一个男士姓名,字符串
输出: 输出最具“夫妻相”的女士姓名
- //这是非常复杂的一种方法,考场上这样写的
- #include <iostream>
- #include <string>
- using namespace std;
- char *str1="wang fei";
- char *str2="zhang man yu";
- char *str3="zhang zhi yi";
- char *str4="li li";
- char *str5="li xiao man";
- char *str6="li yu cun";
- char *str7="yang ni";
- char *str8="xiao tong";
- char *str9="li lei";
- char *str10="zhang san";
- bool a[26],a1[26],a2[26],a3[26],a4[26],a5[26],a6[26],a7[26],a8[26],a9[26],a10[26];
- int num(bool a[],bool b[])
- {
- int count=0;
- for(int i=0;i<26;i++)
- if(a[i]&&b[i])
- count++;
- return count;
- }
- int main()
- {
- char *str=new char[100];
- gets(str); // 此处不能使用cin,否则输入的姓名只有空格前的姓
- int i;
- for(i=0;str1[i]!='\0';i++)
- if(str1[i]<='z' && str1[i]>='a')
- a1[str1[i]-'a']=1;
- for(i=0;str2[i]!='\0';i++)
- if(str2[i]<='z' && str2[i]>='a')
- a2[str2[i]-'a']=1;
- for(i=0;str3[i]!='\0';i++)
- if(str3[i]<='z' && str3[i]>='a')
- a3[str3[i]-'a']=1;
- for(i=0;str4[i]!='\0';i++)
- if(str4[i]<='z' && str4[i]>='a')
- a4[str4[i]-'a']=1;
- for(i=0;str5[i]!='\0';i++)
- if(str5[i]<='z' && str5[i]>='a')
- a5[str5[i]-'a']=1;
- for(i=0;str6[i]!='\0';i++)
- if(str6[i]<='z' && str6[i]>='a')
- a6[str6[i]-'a']=1;
- for(i=0;str7[i]!='\0';i++)
- if(str7[i]<='z' && str7[i]>='a')
- a7[str7[i]-'a']=1;
- for(i=0;str8[i]!='\0';i++)
- if(str8[i]<='z' && str8[i]>='a')
- a8[str8[i]-'a']=1;
- for(i=0;str9[i]!='\0';i++)
- if(str9[i]<='z' && str9[i]>='a')
- a9[str9[i]-'a']=1;
- for(i=0;str10[i]!='\0';i++)
- if(str10[i]<='z' && str10[i]>='a')
- a10[str10[i]-'a']=1;
- for(i=0;str[i]!='\0';i++)
- if(str[i]<='z' && str[i]>='a')
- a[str[i]-'a']=1;
- int abc[10];
- abc[0]=num(a,a1);abc[1]=num(a,a2);abc[2]=num(a,a3);
- abc[3]=num(a,a4);abc[4]=num(a,a5);abc[5]=num(a,a6);
- abc[6]=num(a,a7);abc[7]=num(a,a8);abc[8]=num(a,a9);abc[9]=num(a,a10);
- int maxa=0;
- for(i=0;i<10;i++)
- {
- if(abc[i]>maxa)
- maxa=abc[i];
- }
- for(i=0;i<10;i++)
- {
- if(abc[i]==maxa)
- {
- switch(i)
- {
- case 0:cout<<str1<<endl;break;
- case 1:cout <<str2<<endl;break;
- case 2:cout <<str3<<endl;break;
- case 3:cout<< str4<<endl;break;
- case 4:cout<< str5<<endl;break;
- case 5:cout<< str6<<endl;break;
- case 6:cout<< str7<<endl;break;
- case 7:cout<< str8<<endl;break;
- case 8:cout<< str9<<endl;break;
- case 9:cout <<str10<<endl;break;
- }
- break;
- }
- }
- return 0;
- }
- //这是回来改善的写法
- #include <iostream>
- #include <string>
- using namespace std;
- char str[10][20]={"wang fei","zhang man yu","zhang zhi yi","li li", \
- "li xiao man","li yu cun","yang ni","xiao tong","li lei","zhang san"};
- int flagnum(bool a[],bool b[])
- {
- int count=0;
- for(int i=0;i<26;i++)
- if(a[i]&&b[i])
- count++;
- return count;
- }
- int main()
- {
- char *strgot=new char[100];
- gets(strgot); // 此处不能使用cin,否则输入的姓名只有空格前的姓
- bool flag[10][26];
- memset(flag,0,sizeof(flag));
- int i,j;
- for(i=0;i<10;i++)
- {
- for(j=0;str[i][j]!='\0';j++)
- {
- if(str[i][j]<='z' && str[i][j]>='a')
- {
- flag[i][str[i][j]-'a']=1;
- }
- }
- }
- bool flaginput[26];
- memset(flaginput,0,26);
- for(i=0;strgot[i]!='\0';i++)
- {
- if(strgot[i]<='z' && strgot[i]>='a')
- {
- flaginput[strgot[i]-'a']=1;
- }
- }
- int flagcnt[10];
- for(i=0;i<10;i++)
- {
- flagcnt[i]=flagnum(flaginput,flag[i]);
- }
- int maxa=0;
- for(i=0;i<10;i++)
- {
- if(flagcnt[i]>maxa)
- maxa=flagcnt[i];
- }
- for(i=0;i<10;i++)
- {
- if(flagcnt[i]==maxa)
- {
- cout<<str[i]<<endl;
- break;
- }
- }
- return 0;
- }
3.2014华为武汉上机试题三:CandyBrush游戏
CandyBrush游戏
描述: CandyBrush一款流行的消除游戏,在一个方阵中布满各种糖果,任意交换两个糖果,如果交换后出现横向或者竖向有连续三个相同的情况,则可以消除糖果并得分。
输入25个字符组成的字符串(编号为1到25),表示5×5的方阵,每个字符表示不同类型的糖果(区分大小写),判断是否有解,即交换某两个糖果后能够消除糖果。
举例,下面的方阵无解
T M T M O
X R U C q
A B C X R
U R M T O
T Q C R A
下面的方阵交换(0, 2)和(1, 2)两个糖果后,能消除M
T M T M O
X R M C q
A B C X R
U R M T O
T Q C R A
如果有解,则输出YES,同时输出所有交换方案中,被交换糖果最小编号(1到25),比如:上面的方阵中,被交换的糖果,编号最小的为糖果“T”,编号为3。
如果无解,则输出NO。
运行时间限制: 无限制
内存限制: 无限制
输入:
输入25个字符组成的字符串,不含空格,表示5×5的方阵
输出:
如果有解,则输出YES,同时输出所有交换方案中,被交换糖果最小编号,以空格隔开。如果无解,则输出NO。
样例输入:
TMTMOXRMCqABCXRURMTOTQCRA
样例输出:
YES 3
答案提示:
输出最小糖果编号的意思,就是从左至右,从上到下遍历糖果,找到第一个跟其他交换后能消除的糖果即可。
以下代码来自tianmo2010的博客 http://blog.csdn.net/tianmohust/article/details/11638979
- // 代码版权归TianMo2010 所有
- #include <stdio.h>
- #include <string.h>
- #define N 5
- int findChar(char a[N][N], char c, char direct, char &ret, int i0, int j0)
- {
- int i ,j;
- //纵向查找
- if (direct == '0') {
- //向上
- i = i0 - 1;
- if (i >= 0 && i < N ) {
- if (a[i][j0] == c) {
- ret = '0';
- return 1;
- }
- }
- //向下
- i = i0 + 1;
- if (i >= 0 && i < N) {
- if (a[i][j0] == c) {
- ret = '1';
- return 1;
- }
- }
- } else if (direct == '1') {//横向查找
- //向左
- j = j0 - 1;
- if (j >= 0 && j < N ) {
- if (a[i0][j] == c) {
- ret = '0';
- return 1;
- }
- }
- //向右
- j = j0 + 1;
- if (j >= 0 && j < N) {
- if (a[i0][j] == c) {
- ret = '1';
- return 1;
- }
- }
- } else {
- //没有找到
- }
- return 0;
- }
- int main()
- {
- int i,j;
- int row = 0, col = 0;
- int rowPos = 0, colPos = 0;
- char pA, pB, pC;
- char direct = '0'; //向上或向左, direct = '1',表示向下或向右
- char a[N][N] = {{'T','M','T','M','O'},{'X','R','M','C','q'},{'A','B','C','X','R'},{'U','R','M','T','O'},{'T','Q','C','R','A'}};
- /*
- for (i = 0 ; i < N; ++ i) {
- for (j = 0; j < N; ++ j) {
- scanf("%c", &a[i][j]);
- }
- }
- */
- //每行
- for (i = 0; i < N; ++ i) {
- for (j = 0; j < N - 2; ++ j) {
- //记录每行连续的三个字符
- pA = a[i][j]; pB = a[i][j + 1]; pC = a[i][j + 2];
- //当连续的三个字符相同
- if (pA == pB && pA == pC && pB == pC) {
- row = 1;
- rowPos = i * N + j + 1;
- break;
- } else if (pA == pB) {
- if (findChar(a, pA, '0', direct, i, j + 2) == 1) {
- row = 1;
- if (direct == '0') {
- rowPos = (i - 1) * N + (j + 2) + 1;;
- } else {
- rowPos = i * N + (j + 2) + 1;
- }
- break;
- }
- } else if (pA == pC) {
- if (findChar(a, pA, '0', direct, i, j + 1) == 1) {
- row = 1;
- if (direct == '0') {
- rowPos = (i - 1) * N + (j + 1) + 1;;
- } else {
- rowPos = i * N + (j + 1) + 1;
- }
- break;
- }
- } else if (pB == pC) {
- if (findChar(a, pB, '0', direct, i, j) == 1) {
- row = 1;
- if (direct == '0') {
- rowPos = (i - 1) * N + (j) + 1;;
- } else {
- rowPos = i * N + (j) + 1;
- }
- break;
- }
- } else {
- //行中没有找到
- }
- }
- }
- //每列
- direct = '0';
- for (i = 0; i < N; ++ i) {
- for (j = 0; j < N - 2; ++ j) {
- pA = a[j][i]; pB = a[j + 1][i]; pC = a[j + 2][i];
- if (pA == pB && pA == pC && pB == pC) {
- col = 1;
- colPos = j * N + i + 1;
- } else if (pA == pB) {
- if (findChar(a, pA, '1', direct, j + 2, i) == 1) {
- col = 1;
- if (direct == '0') {
- colPos = (j + 2) * N + (i - 1) + 1;
- } else {
- colPos = (j + 2) * N + (i + 1) + 1;
- }
- break;
- }
- } else if (pA == pC) {
- if (findChar(a, pA, '1', direct, j + 1, i) == 1) {
- col = 1;
- if (direct == '0') {
- colPos = (j + 1) * N + (i - 1) + 1;
- } else {
- colPos = (j + 1) * N + (i + 1) + 1;
- }
- break;
- }
- } else if (pB == pC) {
- if (findChar(a, pB, '1', direct, j , i) == 1) {
- col = 1;
- if (direct == '0') {
- colPos = j * N + (i - 1) + 1;
- } else {
- colPos = j * N + (i + 1) + 1;
- }
- break;
- }
- } else {
- //列中没有找到
- col = 0;
- }
- }
- }
- int minPos = -1;
- if (row == 1 && col == 1) {
- if (rowPos > colPos) {
- minPos = colPos;
- } else {
- minPos = rowPos;
- }
- } else if (row == 1) {
- minPos = rowPos;
- } else if (col == 1) {
- minPos = colPos;
- }
- if (minPos == -1) {
- printf("NO \n");
- } else {
- printf("YES, %d\n", minPos);
- }
- return 0;
- }
- 2014华为武汉上机试题一:手机电池余量
- 2014华为武汉上机试题一:手机电池余量
- 2014华为武汉上机试题规范
- 2014华为武汉上机试题二:姓名的夫妻相
- 2014华为武汉上机试题三:CandyBrush游戏
- 2014华为上机试题
- 2014华为上机试题
- 华为上机试题
- 华为java上机试题
- 2013华为上机试题
- 华为上机试题练习
- 2013华为实习生上机考试试题(一)
- 2013华为实习生上机考试试题(一)
- 华为校园招聘上机试题 Java实现(一)
- 华为校园招聘上机试题Java实现(一)
- 华为上机试题+答案(更新......)
- 华为上机试题及面试
- 2011华为上机机试题
- Android Activity延迟跳转
- 2014-1-20 NB的BUG
- 被上帝咬过一口的苹果
- vector
- 被上帝咬过一口的苹果
- 2014华为武汉上机试题一:手机电池余量
- 被上帝咬过一口的苹果
- Ubuntu常见应用
- 「忑」sub() //把字符串显示为下标 20140824 ①文本处理
- 被上帝咬过一口的苹果
- Java解压和压缩带密码的zip文件
- 被上帝咬过一口的苹果
- wine使用备忘
- 2014-2-11 战斗相关界面完事