发布于 2014-11-08 15:15:58 | 3317 次阅读 | 评论: 1 | 来源: 网友投递

这里有新鲜出炉的精品教程,程序狗速度看过来!

华为

华为技术有限公司是一家生产销售通信设备的民营通信科技公司,总部位于中国广东省深圳市龙岗区坂田华为基地。华为的产品主要涉及通信网络中的交换网络、传输网络、无线及有线固定接入网络和数据通信网络及无线终端产品,为世界各地通信运营商及专业网络拥有者提供硬件设备、软件、服务和解决方案。华为于1987年在中国深圳正式注册成立。


一共三道题,难度依次递增,两个小时。第一题普遍很简单,基本都能写出来,第二题难度适中,相对费些时间,第三题一般情况下就不是我等非软件专业在规定时间内能驾驭的了的啦。

第一题(60分):

       按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”

参考答案:

 

  1. #include <iostream>  
  2.   
  3. void cut(int n,const char *input);  
  4.   
  5. int main()  
  6. {  
  7.     char str[20][20] = {"abc","1234567890"};  
  8.   
  9.     int n = 8;    //设置截取长度  
  10.     int m = 2;    //设置字符串个数  
  11.     for (int i = 0; i < m; i++) {  
  12.         cut(n,str[i]);  
  13.     }  
  14.   
  15.       
  16.     return 0;  
  17. }  
  18.   
  19. void cut(int n,const char *input){  
  20.   
  21.     char temp[100][100];  
  22.     int i = 0,j = 0,k = 0;  
  23.   
  24.     if (strlen(input) <= n)        //若字符串长度小于或者等于要求截取长度  
  25.     {                              //则依次将输入的字符串中的字符放入临时二维数组temp的第一行  
  26.         for (i = 0; i < n; i ++)   //并将大于n的地方补0  
  27.         {  
  28.             if (input[i] != '\0')  
  29.             {  
  30.                 temp[j][k ++] = input[i];  
  31.             }else  
  32.             {  
  33.             temp[j][k++] = '0';  
  34.             }  
  35.         }  
  36.     }else                                   //若字符串长度大于要求截取长度  
  37.     {                                       //则当列数没到达n时,依次将输入中的字符放入temp第一行  
  38.         for (i = 0; i < strlen(input); i++)  
  39.         {  
  40.             if ((i + 1) % n != 0)  
  41.             {  
  42.                 temp[j][k++] = input[i];  
  43.             }else  
  44.             {  
  45.                 temp[j][k++] = input[i];    //当列数到达n时,依次将输入中的字符放入temp的下一行  
  46.                 k = 0;  
  47.                 j++;  
  48.               
  49.             }  
  50.         }  
  51.         while (k < n)  
  52.         {  
  53.             temp[j][k++] = '0';             //将最后一行剩下的元素补0  
  54.         }  
  55.     }  
  56.     for (i = 0; i <=j; i++) {  
  57.         temp[i][k] = '\0';                  //给每一行末尾添加空字符  
  58.     }  
  59.   
  60.     for (i = 0; i <=j; i++) {  
  61.         std::cout << temp[i] <<'\n';        //依次输出结果  
  62.     }  
  63.   
  64.   
  65. }  

 

还是一道第一题,我另一个同学记得

 

第一题:拼音转数字

输入是一个只包含拼音的字符串,请输出对应的数字序列。转换关系如下:

描述:      拼音        yi  er  san  si  wu  liu  qi  ba  jiu

      阿拉伯数字        1   2   3      4   5    6    7   8   9

输入字符只包含小写字母,所有字符都可以正好匹配

 

运行时间限制:无限制

内存限制:       无限制

输入:              一行字符串,长度小于1000

输出:              一行字符(数字)串

样例输入:       yiersansi

样例输出:       1234

 

参考答案

 
  1. #include <iostream>  
  2.   
  3. void numTrans(const char *input,char *output);  
  4.   
  5. int main(int argc, const char * argv[])  
  6. {  
  7.     char pinYinShuZi[1000] = "yiersansiwuliuqibajiu";  
  8.     char shuZi[100];  
  9.     numTrans(pinYinShuZi, shuZi);  
  10.     std::cout << pinYinShuZi << std::endl;  
  11.     std::cout << shuZi << std::endl;  
  12.     return 0;  
  13. }  
  14.   
  15.   
  16. void numTrans(const char *input,char *output)  
  17. {  
  18.     char temp[100];    //用于临时保存转换出的阿拉伯数字  
  19.     int i = 0,j = 0;  
  20.     for (i = 0; i < strlen(input); i++) {  
  21.         switch (input[i]) {            //遍历字符串,分别将拼音转换成阿拉伯数字,并放入temp数组  
  22.             case 'y':  
  23.                 i++;  
  24.                 temp[j++] = '1';  
  25.                 break;  
  26.             case 'e':  
  27.                 i++;  
  28.                 temp[j++] = '2';  
  29.                 break;  
  30.             case 's':  
  31.                 if (input[i + 1] == 'a') {  
  32.                     i++;  
  33.                     i++;  
  34.                     temp[j++] = '3';  
  35.                 }else{  
  36.                     i++;  
  37.                     temp[j++] = '4';  
  38.                 }  
  39.                 break;  
  40.             case 'w':  
  41.                 i++;  
  42.                 temp[j++] = '5';  
  43.                 break;  
  44.             case 'l':  
  45.                 i++;  
  46.                 i++;  
  47.                 temp[j++] = '6';  
  48.                 break;  
  49.             case 'q':  
  50.                 i++;  
  51.                 temp[j++] = '7';  
  52.                 break;  
  53.             case 'b':  
  54.                 i++;  
  55.                 temp[j++] = '8';  
  56.                 break;  
  57.             case 'j':  
  58.                 i++;  
  59.                 i++;  
  60.                 temp[j++] = '9';  
  61.                 break;  
  62.                   
  63.             default:  
  64.                 break;  
  65.         }  
  66.     }  
  67.     temp[j] = '\0';    //给数字数组末尾添加空字符  
  68.       
  69.     for (i = 0; i <= j; i++) {  
  70.         output[i] = temp[i];     //把临时数组赋给输出字符串  
  71.     }  
  72. }  
 

第二题:去除重复字符并排序

运行时间限制:无限制

内容限制:       无限制

输入:              字符串

输出:              去除重复字符并排序的字符串

样例输入:       aabcdefff

样例输出:       abcdef

因为此题我没看懂是去除输入里的所有相同字符,还是仅去除相邻的有重复的字符,所以在代码里两种方法都写了,其中一种方法被我注释了

 
  1. #include <iostream>  
  2.   
  3. void transAndSort(const char * input,char * output);  
  4.   
  5. int main(int argc, const char * argv[])  
  6. {  
  7.     char str[100] = "aabcdefffa";  
  8.     char res[100];  
  9.       
  10.     transAndSort(str,res);  
  11.       
  12.     std::cout << str << std::endl;  
  13.     std::cout << res << std::endl;  
  14.   
  15.     return 0;  
  16. }  
  17.   
  18. void transAndSort(const char * input,char * output)  
  19. {  
  20.   
  21.     int i = 0,j = 1,n,m;  
  22.     int flag = 0;  
  23.     char temp[100];  
  24.     char ex;  
  25.     temp[0] = input[0];  
  26.       
  27. //    for (i = 1; i < strlen(input); i++) {  //去除重复的字符  
  28. //        if (input[i - 1] != input[i]) {    //仅保存与前一个字符不相等的字符  
  29. //            temp[j++] = input[i];          //此处是去除几个相邻的重复的字符的方法  
  30. //        }  
  31. //    }  
  32.       
  33.     for (i = 1; i < strlen(input); i++) {    //此代码块去除字符串中所有有重复的字符  
  34.         for (m = 0; m < j; m++) {            //依次将input中的字符与temp中的所有字符比较  
  35.             if (temp[m] == input[i]) {       //若有相同则舍去  
  36.                 flag = 1;  
  37.             }  
  38.         }  
  39.         if (flag != 1) {                     //flag置1则说明现input的字符与temp中的字符有重复  
  40.             temp[j++] = input[i];  
  41.         }else  
  42.             flag = 0;  
  43.     }  
  44.       
  45.       
  46.       
  47.     temp[j] = '\0';      //这时j等于strlen(temp)  
  48.     for (i = 0; i < j - 1; i++)  
  49.         for (n = 0;n < j - 1 - i;n++)  
  50.         {  
  51.             if (temp[n] > temp[n + 1]) {  
  52.                 ex = temp[n];  
  53.                 temp[n] = temp[n + 1];  
  54.                 temp[n + 1] = ex;  
  55.             }  
  56.         }  
  57.       
  58.     for (i = 0; i <= j; i++) {  
  59.         output[i] = temp[i];  
  60.     }  
  61.       
  62. }  


第三题:等式变换

输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。

1 2 3 4 5 6 7 8 9 = X

比如:

12-34+5-67+89 = 5

1+23+4-5+6-7-8-9 = 5

请编写程序,统计满足输入整数的所有整数个数。

输入:       正整数,等式右边的数字

输出:       使该等式成立的个数

样例输入:5

样例输出:21(此处经大家提醒已更正)



最新网友评论  共有(1)条评论 发布评论 返回顶部
查咳咳 发布于2016-03-29 09:32:07
第三题不知道有简单方法没,我写的有点麻烦。
支持(0)  反对(0)  回复

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务