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

 

//通过华为测

[cpp]
  1. #include <iostream>  
  2. #include <string>  
  3. using namespace std;  
  4. int main()  
  5. {  
  6.     string str1="+----------+";  
  7.     string str2="|----------|";  
  8.     string str3="|++++++++++|";  
  9.     string str4="===============";  
  10.     int n,a[10];  
  11.     cin >> n ;  
  12.     int i,j;  
  13.     for(i=0;i<n;i++)  
  14.         cin >> a[i];  
  15.     for(j=0;j<n;j++)  
  16.     {  
  17.         cout << str1 <<endl;  
  18.         for(i=0;i<10-a[j]/10;i++)  
  19.             cout << str2 << endl;  
  20.         for(i=0;i<a[j]/10;i++)  
  21.             cout << str3 << endl;  
  22.         cout << str1 <<endl;  
  23.         cout << str4 << endl;  
  24.     }  
  25.   
  26.     return 0;  
  27. }  

//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 lingli 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"
运行时间限制: 无限制 
内存限制: 无限制 
输入: 输入一个男士姓名,字符串 
输出: 输出最具夫妻相的女士姓名

[cpp] view plaincopyprint?
  1. //这是非常复杂的一种方法,考场上这样写的  
  2. #include <iostream>  
  3. #include <string>  
  4. using namespace std;  
  5.   
  6. char *str1="wang fei";  
  7. char *str2="zhang man yu";  
  8. char *str3="zhang zhi yi";  
  9. char *str4="li li";  
  10. char *str5="li xiao man";  
  11. char *str6="li yu cun";  
  12. char *str7="yang ni";  
  13. char *str8="xiao tong";  
  14. char *str9="li lei";  
  15. char *str10="zhang san";  
  16. bool a[26],a1[26],a2[26],a3[26],a4[26],a5[26],a6[26],a7[26],a8[26],a9[26],a10[26];  
  17.   
  18. int num(bool a[],bool b[])  
  19. {  
  20.     int count=0;  
  21.     for(int i=0;i<26;i++)  
  22.     if(a[i]&&b[i])  
  23.     count++;  
  24.     return count;  
  25. }  
  26.   
  27. int main()  
  28. {  
  29.     char *str=new char[100];  
  30.     gets(str);   // 此处不能使用cin,否则输入的姓名只有空格前的姓  
  31.   
  32.     int i;  
  33.     for(i=0;str1[i]!='\0';i++)  
  34.         if(str1[i]<='z' && str1[i]>='a')  
  35.             a1[str1[i]-'a']=1;  
  36.     for(i=0;str2[i]!='\0';i++)  
  37.         if(str2[i]<='z' && str2[i]>='a')  
  38.             a2[str2[i]-'a']=1;  
  39.     for(i=0;str3[i]!='\0';i++)  
  40.         if(str3[i]<='z' && str3[i]>='a')  
  41.             a3[str3[i]-'a']=1;  
  42.     for(i=0;str4[i]!='\0';i++)  
  43.         if(str4[i]<='z' && str4[i]>='a')  
  44.             a4[str4[i]-'a']=1;  
  45.     for(i=0;str5[i]!='\0';i++)  
  46.         if(str5[i]<='z' && str5[i]>='a')  
  47.             a5[str5[i]-'a']=1;  
  48.     for(i=0;str6[i]!='\0';i++)  
  49.         if(str6[i]<='z' && str6[i]>='a')  
  50.             a6[str6[i]-'a']=1;  
  51.     for(i=0;str7[i]!='\0';i++)  
  52.         if(str7[i]<='z' && str7[i]>='a')  
  53.             a7[str7[i]-'a']=1;  
  54.     for(i=0;str8[i]!='\0';i++)  
  55.         if(str8[i]<='z' && str8[i]>='a')  
  56.             a8[str8[i]-'a']=1;  
  57.     for(i=0;str9[i]!='\0';i++)  
  58.         if(str9[i]<='z' && str9[i]>='a')  
  59.             a9[str9[i]-'a']=1;  
  60.     for(i=0;str10[i]!='\0';i++)  
  61.         if(str10[i]<='z' && str10[i]>='a')  
  62.             a10[str10[i]-'a']=1;  
  63.   
  64.     for(i=0;str[i]!='\0';i++)  
  65.         if(str[i]<='z' && str[i]>='a')  
  66.             a[str[i]-'a']=1;  
  67.   
  68.     int abc[10];  
  69.     abc[0]=num(a,a1);abc[1]=num(a,a2);abc[2]=num(a,a3);  
  70.     abc[3]=num(a,a4);abc[4]=num(a,a5);abc[5]=num(a,a6);  
  71.     abc[6]=num(a,a7);abc[7]=num(a,a8);abc[8]=num(a,a9);abc[9]=num(a,a10);  
  72.   
  73.     int maxa=0;  
  74.     for(i=0;i<10;i++)  
  75.     {  
  76.         if(abc[i]>maxa)  
  77.             maxa=abc[i];  
  78.     }  
  79.     for(i=0;i<10;i++)  
  80.     {  
  81.         if(abc[i]==maxa)  
  82.         {  
  83.             switch(i)  
  84.             {  
  85.                 case 0:cout<<str1<<endl;break;  
  86.                 case 1:cout <<str2<<endl;break;  
  87.                 case 2:cout <<str3<<endl;break;  
  88.                 case 3:cout<< str4<<endl;break;  
  89.                 case 4:cout<< str5<<endl;break;  
  90.                 case 5:cout<< str6<<endl;break;  
  91.                 case 6:cout<< str7<<endl;break;  
  92.                 case 7:cout<< str8<<endl;break;  
  93.                 case 8:cout<< str9<<endl;break;  
  94.                 case 9:cout <<str10<<endl;break;  
  95.   
  96.             }  
  97.             break;  
  98.         }  
  99.     }  
  100.   
  101.     return 0;  
  102. }  
[cpp] view plaincopyprint?
  1. //这是回来改善的写法  
  2. #include <iostream>  
  3. #include <string>  
  4. using namespace std;  
  5.   
  6. char str[10][20]={"wang fei","zhang man yu","zhang zhi yi","li li", \  
  7. "li xiao man","li yu cun","yang ni","xiao tong","li lei","zhang san"};  
  8.   
  9. int flagnum(bool a[],bool b[])  
  10. {  
  11.     int count=0;  
  12.     for(int i=0;i<26;i++)  
  13.     if(a[i]&&b[i])  
  14.     count++;  
  15.     return count;  
  16. }  
  17.   
  18. int main()  
  19. {  
  20.     char *strgot=new char[100];  
  21.     gets(strgot);   // 此处不能使用cin,否则输入的姓名只有空格前的姓  
  22.   
  23.     bool flag[10][26];  
  24.     memset(flag,0,sizeof(flag));  
  25.     int i,j;  
  26.   
  27.     for(i=0;i<10;i++)  
  28.     {  
  29.         for(j=0;str[i][j]!='\0';j++)  
  30.         {  
  31.             if(str[i][j]<='z' && str[i][j]>='a')  
  32.             {  
  33.                 flag[i][str[i][j]-'a']=1;  
  34.             }  
  35.         }  
  36.     }  
  37.     bool flaginput[26];  
  38.     memset(flaginput,0,26);  
  39.     for(i=0;strgot[i]!='\0';i++)  
  40.     {  
  41.         if(strgot[i]<='z' && strgot[i]>='a')  
  42.         {  
  43.             flaginput[strgot[i]-'a']=1;  
  44.         }  
  45.     }  
  46.   
  47.   
  48.     int flagcnt[10];  
  49.     for(i=0;i<10;i++)  
  50.     {  
  51.         flagcnt[i]=flagnum(flaginput,flag[i]);  
  52.     }  
  53.   
  54.     int maxa=0;  
  55.     for(i=0;i<10;i++)  
  56.     {  
  57.         if(flagcnt[i]>maxa)  
  58.             maxa=flagcnt[i];  
  59.     }  
  60.   
  61.       
  62.   
  63.     for(i=0;i<10;i++)  
  64.     {  
  65.         if(flagcnt[i]==maxa)  
  66.         {  
  67.             cout<<str[i]<<endl;  
  68.             break;  
  69.         }  
  70.     }  
  71.   
  72.     return 0;  
  73. }   

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


[cpp] view plaincopyprint?
  1. // 代码版权归TianMo2010 所有  
  2. #include <stdio.h>  
  3. #include <string.h>  
  4.   
  5. #define N 5  
  6.   
  7. int findChar(char a[N][N], char c, char direct, char &ret, int i0, int j0)  
  8. {  
  9.     int i ,j;  
  10.       
  11.     //纵向查找  
  12.     if (direct == '0') {  
  13.             //向上  
  14.             i = i0 - 1;  
  15.             if (i >= 0 && i < N ) {  
  16.               
  17.                 if (a[i][j0] == c) {  
  18.                     ret = '0';  
  19.                     return 1;  
  20.                 }  
  21.             }   
  22.   
  23.             //向下  
  24.             i = i0 + 1;  
  25.             if (i >= 0 && i < N) {  
  26.               
  27.                 if (a[i][j0] == c) {  
  28.                     ret = '1';  
  29.                     return 1;  
  30.                 }  
  31.             }   
  32.   
  33.     } else if (direct == '1') {//横向查找  
  34.         //向左  
  35.         j = j0 - 1;  
  36.         if (j >= 0 && j < N ) {  
  37.           
  38.             if (a[i0][j] == c) {  
  39.                 ret = '0';  
  40.                 return 1;  
  41.             }  
  42.         }   
  43.   
  44.         //向右  
  45.         j = j0 + 1;  
  46.         if (j >= 0 && j < N) {  
  47.           
  48.             if (a[i0][j] == c) {  
  49.                 ret = '1';  
  50.                 return 1;  
  51.             }  
  52.         }   
  53.   
  54.     } else {  
  55.         //没有找到  
  56.     }  
  57.       
  58.     return 0;  
  59. }  
  60.   
  61. int main()  
  62. {  
  63.     int i,j;  
  64.     int row = 0, col = 0;  
  65.     int rowPos = 0, colPos = 0;  
  66.           
  67.     char pA, pB, pC;  
  68.     char direct = '0'//向上或向左, direct = '1',表示向下或向右  
  69.   
  70.     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'}};  
  71.     /* 
  72.     for (i = 0 ; i < N; ++ i) { 
  73.         for (j = 0; j  < N; ++ j) { 
  74.             scanf("%c", &a[i][j]); 
  75.         } 
  76.     } 
  77.     */  
  78.   
  79.     //每行  
  80.     for (i = 0; i < N; ++ i) {  
  81.         for (j = 0; j < N - 2; ++ j) {  
  82.             //记录每行连续的三个字符  
  83.             pA = a[i][j]; pB = a[i][j + 1]; pC = a[i][j + 2];  
  84.   
  85.             //当连续的三个字符相同  
  86.             if (pA == pB && pA == pC && pB == pC) {   
  87.                 row = 1;  
  88.                 rowPos =  i * N + j + 1;              
  89.                 break;            
  90.             } else if (pA == pB) {  
  91.                 if (findChar(a, pA, '0', direct, i, j + 2) == 1) {  
  92.                     row = 1;  
  93.                     if (direct == '0') {  
  94.                         rowPos = (i - 1) * N + (j + 2)  + 1;;  
  95.                     } else {  
  96.                         rowPos = i * N + (j + 2)  + 1;                        
  97.                     }  
  98.                     break;                    
  99.                 }  
  100.             } else if (pA == pC) {                    
  101.                 if (findChar(a, pA, '0', direct, i, j + 1) == 1) {    
  102.                     row = 1;  
  103.                     if (direct == '0') {  
  104.                         rowPos = (i - 1) * N + (j + 1)  + 1;;  
  105.                     } else {  
  106.                         rowPos = i * N + (j + 1)  + 1;                        
  107.                     }  
  108.                     break;                    
  109.                 }  
  110.             } else if (pB == pC) {  
  111.                 if (findChar(a, pB, '0', direct, i, j) == 1) {  
  112.                     row = 1;  
  113.                     if (direct == '0') {  
  114.                         rowPos = (i - 1) * N + (j)  + 1;;  
  115.                     } else {  
  116.                         rowPos = i * N + (j)  + 1;                        
  117.                     }  
  118.                     break;                    
  119.                 }  
  120.             } else {  
  121.                 //行中没有找到  
  122.             }         
  123.         }  
  124.     }  
  125.   
  126.     //每列  
  127.     direct = '0';  
  128.     for (i = 0; i < N; ++ i) {  
  129.         for (j = 0; j < N - 2; ++ j) {  
  130.             pA = a[j][i]; pB = a[j + 1][i]; pC = a[j + 2][i];  
  131.             if (pA == pB && pA == pC && pB == pC) {  
  132.                 col = 1;  
  133.                 colPos = j * N + i + 1;  
  134.             } else if (pA == pB) {  
  135.                 if (findChar(a, pA, '1', direct, j + 2, i) == 1) {  
  136.                     col = 1;  
  137.                     if (direct == '0') {  
  138.                         colPos = (j + 2) * N + (i - 1)  + 1;  
  139.                     } else {  
  140.                         colPos = (j + 2) * N + (i + 1)  + 1;                          
  141.                     }  
  142.                     break;                    
  143.                 }  
  144.             } else if (pA == pC) {                    
  145.                 if (findChar(a, pA, '1', direct, j + 1, i) == 1) {    
  146.                     col = 1;  
  147.                     if (direct == '0') {  
  148.                         colPos = (j + 1) * N + (i - 1)  + 1;  
  149.                     } else {  
  150.                         colPos = (j + 1) * N + (i + 1)  + 1;                          
  151.                     }  
  152.                     break;                    
  153.                 }  
  154.             } else if (pB == pC) {                    
  155.                 if (findChar(a, pB, '1', direct, j , i) == 1) {   
  156.                     col = 1;  
  157.                     if (direct == '0') {  
  158.                         colPos = j * N + (i - 1)  + 1;  
  159.                     } else {  
  160.                         colPos = j * N + (i + 1)  + 1;                        
  161.                     }  
  162.                     break;                    
  163.                 }  
  164.             } else {  
  165.                 //列中没有找到  
  166.                 col = 0;  
  167.             }  
  168.         }  
  169.     }  
  170.       
  171.     int minPos = -1;  
  172.     if (row == 1 && col == 1) {  
  173.         if (rowPos > colPos) {  
  174.             minPos = colPos;  
  175.         } else {  
  176.             minPos = rowPos;  
  177.         }  
  178.     } else if (row == 1) {  
  179.         minPos = rowPos;  
  180.     } else if (col == 1) {  
  181.         minPos = colPos;  
  182.     }   
  183.   
  184.     if (minPos == -1) {  
  185.         printf("NO \n");  
  186.     } else {  
  187.         printf("YES, %d\n", minPos);  
  188.     }  
  189.   
  190.     return 0;  
  191.       
  192. }  


0 0
原创粉丝点击