精华内容
下载资源
问答
  • 华为机试题,本来以为对一些基础的程序还是有点信心的;不过不练不知道,一练吓一跳。平时虽然也都码程序,但是一到机试题就各种乱七八的不适应。还是要加强一下练习。   1、字符串最后一个单词的长度 题目描述...

    华为机试题,本来以为对一些基础的程序还是有点信心的;不过不练不知道,一练吓一跳。平时虽然也都码程序,但是一到机试题就各种乱七八的不适应。还是要加强一下练习。

     

    1、字符串最后一个单词的长度

    题目描述:计算字符串最后一个单词的长度,单词以空格隔开。

    例如:输入Hello World,输出5。

    解答:这道题主要是练习一下字符串的输入和指定字符的查找。

    #include <iostream>
    using namespace std;
    #include <string>
    
    int main(){
        string s;
        getline(cin,s);
        int j=0;
        for(int i=s.length()-1; i>=0; i--){
            if(s[i]!=' '){
                j++;
            }else{
                break;
            }
        }
        cout<<j;
        return 0;
    }

    如果熟悉C++的各种函数的话,可以使用String的rfind()函数(寻找某个字符最后一次出现的序号)、find()函数(寻找某个字符第一次出现的序号)。

    #include <iostream>
    using namespace std;
    #include <string>
    
    int main() {
    	string s;
    	getline(cin, s);
    	int j;
    	j = s.length() - 1 - s.rfind(' ');
    	cout << j;
    	return 0;
    }

     

    2、计算字符个数

    题目描述:写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。

    例如:输入ABCDEF A,输出1。

    解答:这道题主要是练习一下大小写的改写。

    #include <iostream>
    using namespace std;
    #include <string>
    
    int main()
    {
    	string s;
    	getline(cin, s);
    	char c;
    	cin >> c;
    	int count = 0;
    	for (int i = 0; i<s.length(); i++) {
    		if (s.at(i)== toupper(c)|| s.at(i) == tolower(c))
    			count++;
    	}
    	cout << count;
    	return 0;
    }

    或者,也可以使用C语言来编写:

    #include <stdio.h>
    #include <string.h>
      
    int main()
    {
       char str[10000];
       char ch;
       int len = 0;
       gets(str); 
       ch = getchar();              //scanf("%c",&ch); 
       for(int i = 0; i < strlen(str); i++)
       {
                if(str[i] == ch || str[i] == ch -32 || str[i] == ch + 32)
                    len++;
       }
       printf("%d\n",len);
       return 0;
    }

    注意一点:在C++中字符串长度可以用.size()、.length()方法;而strlen(char *),若放入一个字符串常量是可以求长度的,但是若放入一个字符串变量则不行。这三个方法都不计算字符串最后的结束符'\0',甚至可以说是,遇到第一个字符串结束符'\0'就停止计算个数了。

    注意:如果使用sizeof()来计算字符串变量的长度是不正确的!C++标准库中的string类的对象在创建时会保留额外的内存空间,以便于用户调用append成员函数或者给string对象重新赋值时不会发生越界行为。所以,最小默认为28。

    sizeof 操作函数类型:

    int f1(){return 0;};
    double f2(){return 0.0;}
    void f3(){}
    
    cout<<sizeof(f1())<<endl;     // f1()返回值为int,因此被认为是int
    cout<<sizeof(f2())<<endl;     // f2()返回值为double,因此被认为是double
    cout<<sizeof(f3())<<endl;     // 错误!无法对void类型使用sizeof
    cout<<sizeof(f1)<<endl;       // 错误!无法对函数指针使用sizeof   
    cout<<sizeof*f2<<endl;        // *f2,和f2()等价,被认为是double

     

    3、明明的随机数

    题目描述:明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。

    例如:输入11 10 20 40 32 67 40 20 89 300 400 15,输出10 15 20 32 40 67 89 300 400。

    解答:原本做这道题就是很机械地排序来做:

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int count;
    	while (cin >> count) {
    		int temp, flag = 0;
    		int num[1000];
    		for (int i = 0; i < count; i++) {
    			cin >> num[i];
    		}
    		for (int i = 0; i < count - 1; i++) {
    			for (int j = i + 1; j < count - flag; j++) {
    				if (num[i] > num[j]) {
    					temp = num[i];
    					num[i] = num[j];
    					num[j] = temp;
    				}
    				if (num[i] == num[j]) {
    					flag++;
    					for (int k = j; k < count - 1; k++) {
    						num[k] = num[k + 1];
    					}
    					j--;
    				}
    			}
    		}
    		for (int i = 0; i < count - flag; i++) {
    			cout << num[i] << endl;
    		}
    	}
    	return 0;
    }

    看得出来,算法复杂度很高。后来发现了一个很巧妙的方法,通过计数排序来完成:

    #include <iostream>
    using namespace std;
    
    int main() {
        int N, n;
        while (cin >> N) {
            int a[1001] = { 0 };
            while (N--) {
                cin >> n;
                a[n] = 1;
            }
            for (int i = 0; i < 1001; i++)
                if (a[i])
                    cout << i << endl;
        }
        return 0;
    }

    这个方法在之前大疆的笔试题中也遇到了:【嵌入式基础】2014大疆嵌入式笔试题(附超详细解答,上篇)

     

    4、字符串分隔

    题目描述:连续输入两个字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。 

    例如:输入abc 123456789,输出abc00000 12345678 90000000。

    解答:拆分字符串,很传统的方法是:

    #include <iostream>
    using namespace std;
    #include <string>
    
    void fun(string s) 
    {
    	char str[13][8];
    	int num = 0, count = 0;
    	for (int j = 0; j < s.length(); j++) {
    		if (count == 8) {
    			count = 0;
    			num++;
    		}
    		str[num][count] = s.at(j);
    		count++;
    	}
    	while (count != 8) {
    		str[num][count] = '0';
    		count++;
    	}
    	for (int i = 0; i < num + 1; i++) {
    		for (int j = 0; j < 8; j++) {
    			cout << str[i][j];
    		}
    		cout << endl;
    	}
    }
    
    int main() 
    {
    	string s1, s2;
    	getline(cin, s1);
    	getline(cin, s2);
    	fun(s1);
    	fun(s2);
    
    	return 0;
    }

    这样做虽然也能获得答案,但是很明显,还是有点绕的。其实可以利用string的substr()方法来解决:

    #include <iostream>
    using namespace std;
    #include <string>
    
    void fun(string s) 
    {
    	while (s.size() > 8) {
    		cout << s.substr(0, 8) << endl;
    		s = s.substr(8);
    	}
    	cout << s.append(8 - s.size(), '0') << endl;
    }
    int main() {
    	string s1, s2;
    	getline(cin, s1);
    	getline(cin, s2);
    	fun(s1);
    	fun(s2);
    
    	return 0;
    }

    瞬间感觉整个程序都清晰了许多!下面分析一下string的substr()和substring()的区别:

     

    • stringvar.substr(start , [length]):索引,长度
    • strVariable.substring(start, end):索引,索引

    说明:

     

    • 如果substr()函数的length为0或负数,将返回一个空字符串。如果没有指定该参数,则子字符串将延续到 stringvar 的最后;
    • substring()方法将返回一个包含从start 到最后(不包含end)的子字符串的字符串;
    • substring()方法使用start和end两者中的较小值作为子字符串的起始点。

     

    5、进制转换

    题目描述:写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )

    例如:输入0xA,输出10。

    解答:采取进制转换的计算方法,但是需要注意的是这里的方法不是那种死板的计算方法:

    #include <iostream>
    using namespace std;
    #include <string>
    
    int main() {
    	string str;
    	while (getline(cin, str)) {
    		long num = 0; 
    		for (int i = 2; i < str.length(); ++i) {
    			if (str[i] >= '0' && str[i] <= '9')
    				num = num * 16 + (str[i] - '0');
    			else
    				num = num * 16 + (str[i] - 'A' + 10);
    		}
    		cout << num << endl;
    	}
    
    	return 0;
    }

    但是这样的做法,不能够对输入的数值进行十六进制的判断。当然,本题还有一个非常投巧的方法,利用输入的办法来进行数制转换,而且可以完成十六进制的判断(hex:十六进制、oct:八进制、dev:十进制)

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int a;
        while(cin>>hex>>a){
            cout<<a<<endl;
        }
    }

    利用C语言也可以实现:

    #include <stdio.h>
    
    int main() 
    {
    	int a;
    	while (scanf_s("%X", &a)) {
    		printf("%d\n", a);
    	}
    }

     

    6、质数因子

    题目描述:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子,最后一个数后面也要有空格。

    例如:输入180,输出2 2 3 3 5 。

    解答:这道看似很简单的题目,原来也是有坑的!刚开始的思路就是按部就班地循环--判断是否为质数--判断是否是因子:

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	long num;
    	cin >> num;
    	for (int i = 2; i <= num; i++) {
    		bool flag = true;
    		for (int j = 2; j < i; j++) {
    			if (i%j == 0) {
    				flag = false;
    				break;
    			}
    		}
    		if (flag) {
    			if (num%i == 0) {
    				num = num / i;
    				cout << i << ' ';
    				i--;
    			}
    		}
    	}
    
    	return 0;
    }

    后来看了别人写的程序,突然发现自己智商可能真的不够用:

    #include <iostream>
    using namespace std;
    
    int main(void)
    {
    	long input;
    	while (cin >> input)
    	{
    		while (input != 1)
    		{
    			for (int i = 2; i <= input; i++)
    			{
    				if (input % i == 0)
    				{
    					input /= i;
    					cout << i << ' ';
    					break;
    				}
    			}
    		}
    
    	}
    
    	return 0;
    }

    这个程序算不上完美,每次更新完input之后又都从2开始循环,在这一点上明显复杂度比我的代码高了不少。但是,这个程序让我突然发现,这道题目其实和是不是质数没有关系!从2开始循环,如果都有一个非质数因子,那么在这个因子的前面,该非质数的质数因子又是怎么能“幸免于难”的呢?

    也就是说,这道题的程序只要如下就行了:

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	long num;
    	cin >> num;
    	for (int i = 2; i <= num; i++) {
    		if (num%i == 0) {
    			num = num / i;
    			cout << i << ' ';
    			i--;
    		}
    	}
    
    	return 0;
    }

     

    7、取近似值

    题目描述:写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。

    例如:输入5.5,输出6。

    解答:float强制转换成int为截取。

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	float f;
    	cin >> f;
    	if ((f - (int)f) >= 0.5)
    		cout << (int)f + 1;
    	else
    		cout << (int)f;
    
    	return 0;
    }

    后来看见网友的一个答案,瞬间觉得很赞,算是开拓一下:

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	float a;
    	cin >> a;
    	cout << int(a + 0.5);
    
    	return 0;
    }

     

    8、合并表记录

    题目描述:数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。

    例如:输入4 0 1 0 2 1 2 3 4,输出0 3 1 2 3 4。

    解答:用数组来装数据表记录进行解答。

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int a[1000][2];
    	int num;
    	int temp;
    	cin >> num;
    	for (int i = 0; i < num; i++) {
    		cin >> a[i][0] >> a[i][1];
    	}
    	for (int i = 0; i < num - 1; i++) {
    		for (int j = i + 1; j < num ; j++) {
    			if (a[i][0] > a[j][0]) {
    				temp = a[i][0];
    				a[i][0] = a[j][0];
    				a[j][0] = temp;
    				temp = a[i][1];
    				a[i][1] = a[j][1];
    				a[j][1] = temp;
    			}
    			if (a[i][0] == a[j][0]) {
    				a[i][1] = a[i][1] + a[j][1];
    				for (int k = j; k < num-1 ; k++) {
    					a[k][0] = a[k + 1][0];
    					a[k][1] = a[k + 1][1];
    				}
    				num--;
    				j--;
    			}
    		}
    	}
    	for (int i = 0; i < num ; i++) {
    		cout << a[i][0] << ' ' << a[i][1] << endl;
    	}
    
    	return 0;
    }

    我看网友其他人的答案,发现很多还是用第三题的计数排序的方法来解答的,也通过了测试。其实,这道题并没有规定索引值一定是整数啊!要是有小数,计数排序就没办法了。算是题目的锅吧,同样也附上代码:

    #include<iostream>
    using namespace std;
    
    int  main()
    {
    	int Key_Value[10000] = { 0 }, Key, Value, Number, i;
    	cin >> Number;
    	for (i = 0; i<Number; i++)
    	{
    		cin >> Key >> Value;
    		Key_Value[Key] += Value;
    	}
    	for (i = 0; i<10000; i++)
    	{
    		if (Key_Value[i] != 0)
    			cout << i << ' ' << Key_Value[i] << endl;
    	}
    
    	return 0;
    }

     

    9、提取不重复的整数

    题目描述:输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。

    例如:输入9876673,输出37689。

    解答:很容易就想到用计数的方法来进行解决这道题:

    #include<iostream>
    using namespace std;
    
    int  main()
    {
    	int num;
    	cin >> num;
    	int result;
    	result = num;
    	int a[10][2] = { 0 };
    	while (num) {
    		a[num % 10][0]++;
    		num = num / 10;
    	}
    	while (result) {
    		if (a[result % 10][0] == 1|| (a[result % 10][0] > 1&& a[result % 10][1]==0)) {
    			cout << result % 10;
    			a[result % 10][1] = 1;
    		}
    		result = result / 10;
    	}
    
    	return 0;
    }

    但是发现自己是一个很按部就班的人,总是把问题分成很多小目标,然后分别一一解决。但是缺少把几个目标相互关联的本事,就像这道题,可以将两个循环合并来解决:

    #include<iostream>
    using namespace std;
    
    int main()
    {
    	int n;
    	int a[10] = { 0 };
    	int num = 0;
    	cin >> n;
    	while (n)
    	{
    		if (a[n % 10] == 0)
    		{
    			a[n % 10]++;            //这一步是更新,遇到下次相同的数会跳过
    			num = num * 10 + n % 10;
    		}
    		n /= 10;
    	}
    	cout << num << endl;
    
    	return 0;
    }

     

    10、字符个数统计

    题目描述:编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。

    例如:输入abc,输出3。

    解答:很简单的一个程序,计数法(华为机试题好像很喜欢这个方法,一定要注意):

    #include <iostream>
    using namespace std;
    #include <string>
    
    int main()
    {
    	string s;
    	getline(cin, s);
    	int a[128] = { 0 }, num = 0;
    	for (int i = 0; i<s.size(); i++) {
    		a[(int)s.at(i)]++;
    	}
    	for (int i = 0; i < 128; i++) {
    		if (a[i] != 0)
    			num++;
    	}
    	cout << num;
    
    	return 0;
    }

     

    11、数字颠倒

    题目描述:输入一个整数,将这个整数以字符串的形式逆序输出。程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001。

    例如:输入123,输出321。

    解答:很简单的一个程序,只不过注意一下用do...while,而不是while:

    #include <iostream>
    using namespace std;
    #include <string>
    
    int main()
    {
    	int i;
    	cin >> i;
    	do {
    		cout<<(char) (i % 10 + 48);
    		i = i / 10;
    	} while (i);
    
    	return 0;
    }

    将数字转化为char的方法:

    (char) (i % 10 + 48);
    (char) (i % 10 + '0');

    常见的ASCII码还是有点印象比较好:

    0-9:48-57;A-Z:65-90;a-z:97-122。

     

    12、句子逆序

    题目描述:将一个英文语句以单词为单位逆序。所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符。

    例如:输入“I am a boy”,输出“boy a am I”。

    解答:单词逆序,但仍然要保持单词。通过substr()函数来进行截取:

    #include <iostream>
    using namespace std;
    #include <string>
    
    int main()
    {
    	string s, s1, s2;
    	int flag = 0, i = 0;
    	getline(cin, s);
    	for (int j = 0; j < s.size(); j++) {
    		if (s.at(j) == ' ') {
    			s1 = s.substr(flag, j - flag);
    			if (i == 0) {
    				s2 = s1;
    				i++;
    			}
    			else
    				s2 = s1 + " " + s2;
    			flag = j + 1;
    		}
    		if (j == s.size() - 1) {
    			s1 = s.substr(flag, j - flag + 1);
    			s2 = s1 + " " + s2;
    		}
    	}
    	cout << s2;
    
    	return 0;
    }

    参考网上的一些程序,发现一个很巧妙的方法!通过stack“先进后出”的特性:

    #include <iostream>
    #include <stack>
    #include <string>
    using namespace std;
    
    int main()
    {
    	stack<string> ss;
    	string s;
    	while (cin >> s)
    	{
    		ss.push(s);
    	}
    	while (!ss.empty())
    	{
    		cout << ss.top();
    		ss.pop();
    		if (!ss.empty())
    			cout << ' ';
    	}
    	cout << endl;
    
            return 0;
    }

     

    13、字串的连接最长路径查找

    题目描述:给定n个字符串,请对n个字符串按照字典序排列。

    例如:输入9 cap to cat card two too up boat boot,输出boat boot cap card cat to too two up。

    解答:直接排序就行了。对于字符串“>、<、==、+”这些运算符都被重载了,可以直接用:

    #include <iostream>
    using namespace std;
    #include <string>
    
    int main()
    {
    	int num;
    	cin >> num;
    	string s[1000], temp;
    	for (int i = 0; i < num; i++) {
    		cin >> s[i];
    	}
    	for (int i = 0; i < num-1; i++) {
    		for (int j = 0; j < num-i-1; j++) {
    			if (s[j] > s[j+1]) {
    				temp = s[j];
    				s[j] = s[j+1];
    				s[j+1] = temp;
    			}
    		}
    	}
    	for (int i = 0; i < num; i++)
    		cout << s[i] << endl;
    
    	return 0;
    }

    参考其他人的程序,发现一堆使用STL封装的数据结构和函数的……总感觉脱离了出题人的本意了,原本考验算法的,直接一个函数就解决……(可能是因为自己不太熟悉这些函数就酸吧):

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    int main()
    {
    	int input;
    	while (cin >> input)
    	{
    		string str;
    		vector<string> vs;
    		while (input--)
    		{
    			cin >> str;
    			vs.push_back(str);
    		}
    		sort(vs.begin(), vs.end());
    		vector<string>::iterator vit;
    		for (vit = vs.begin(); vit != vs.end(); vit++)
    		{
    			cout << *vit << endl;
    		}
    	}
    
    	return 0;
    }

     

    14、求int型正整数在内存总存储时1的个数

    题目描述:输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。

    例如:输入5,输出2。

    解答:这道题可以使用i&(i-1)的方式来求1的个数:

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int i,j=0;
    	cin >> i;
    	while (i) {
    		i=i & (i - 1);
    		j++;
    	}
    	cout << j;
    
    	return 0;
    }

    当然,看了其他网友的程序,也有其他的方法:

    #include<iostream>
    using namespace std;
    
    int main()
    {
    	int a, count;
    	cin >> a;
    
    	count = 0;
    	while (a>0)
    	{
    		if (a & 1)
    			count++;
    		a >>= 1;
    	}
    	cout << count << endl;
    
    	return 0;
    }

    或者:

    #include<iostream>
    using namespace std;
    
    int main()
    {
    	int t;
    	cin >> t;
    	int count = 0;
    	while (t>0)
    	{
    		if (t % 2)   count++;
    		t = t / 2;
    	}
    	cout << count << endl;
    
    	return 0;
    }

     

    15、坐标移动

    题目描述:开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。输入:合法坐标为A(或者D或者W或者S) + 数字(两位以内),坐标之间以“;”分隔。非法坐标点需要进行丢弃。如AA10;  A1A;  $%$;  YAD; 等。

    例如:输入A10;S20;W10;D30;X;A1A;B10A11;;A10;,输出10,-10。

    解答:这道题还是在华为机试题里第一次遇到的比较复杂的题目。想了蛮久,用了一堆的标志位:

    #include <iostream>
    using namespace std;
    #include <string>
    
    int main()
    {
    	string s;
    	while (getline(cin, s)) {
    		int x = 0, y = 0;
    		int m = 0, n = -1, k = 0;
    		bool flag = false, flag1 = false;
    		for (int i = 0; i < s.size(); i++) {
    			if (s.at(i) == 'W' || s.at(i) == 'A' || s.at(i) == 'S' || s.at(i) == 'D') {
    				if (n != -1) flag1 = true;
    				if (s.at(i) == 'W') n = 0;
    				if (s.at(i) == 'A') n = 1;
    				if (s.at(i) == 'S') n = 2;
    				if (s.at(i) == 'D') n = 3;
    				if (k == 0) flag = true;
    			}
    			k++;
    			if (flag) {
    				if (s.at(i) <= '9'&&s.at(i) >= '0') {
    					m = m * 10 + s.at(i) - '0';
    				}
    			}
    			if (s.at(i) == ';') {
    				if (flag1) m = 0;
    				if (n == 0) y = y + m;
    				if (n == 1) x = x - m;
    				if (n == 2) y = y - m;
    				if (n == 3) x = x + m;
    				n = -1;
    				m = 0;
    				k = 0;
    				flag = false;
    				flag1 = false;
    			}
    		}
    		cout << x << ',' << y << endl;
    	}
    
    	return 0;
    }

    需要注意的是:我这边采用循环输入的方式:

     

    while (getline(cin, s)) {
            ...
    }

    如果不采用这种方式的话,会报错,通过不了测试……具体什么时候需要循环输入,什么时候不需要循环输入……不知道……

    参考网上的解答,发现了一个不错的程序:

    #include<iostream>
    #include<string>
    #include<cstddef>   //std::size_t
    using namespace std;
    
    int main()
    {
    	string str;
    	while (cin >> str) {
    		pair<int, int> point(0, 0);               //point.first point.second
    		size_t found = str.find_first_of(';');  //找到第一个';'的位置
    		int start = 0;
    
    		while (found != string::npos) {
    			string s1 = str.substr(start, found - start);
    			start = found + 1;
    			found = str.find_first_of(';', found + 1);
    
    			if (s1.size()>1 && s1.size() <= 3) {    //合法的字符个数:2或3
    				char c = s1[0];
    				int n = 0;
    				int invalid = 0;    //数字为是否非法
    				for (int i = 1; i<s1.size(); ++i) { //数字位判断与提取,A1A
    					if (s1[i] >= '0'&&s1[i] <= '9')
    						n = n * 10 + (s1[i] - '0');
    					else {
    						invalid = 1;
    						break;
    					}
    				}
    				if (invalid == 0) {
    					switch (c)
    					{
    					case 'A': {point.first -= n; break; }
    					case 'D': {point.first += n; break; }
    					case 'W': {point.second += n; break; }
    					case 'S': {point.second -= n; break; }
    					}
    				}
    
    			}
    		}
    		cout << point.first << ',' << point.second << endl;
    	}
    
    	return 0;
    }

    这段程序采用substr()函数来截取字符串的一部分,同时使用find_first_of()函数来寻找字符串当中的字符。需要注意的是,find_first_of()函数的第二个参数为:查找的起始索引位置。

    注意:find()函数和find_first_of()函数两者的意义大体相同,它们之间最大的区别就是如果在一个字符串str1中使用find_first_of()来查找另一个字符串str2,如果str1中含有str2中的任何字符,则就会查找成功;而find则不同。

     

    展开全文
  • 华为机试题-20190417

    万次阅读 2019-04-17 21:11:27
    华为机试题 给定一个数组,里面有6个整数,求这个数组能够表示的最大24进制的时间是多少,输出这个时间,无法表示输出invalid。 小王手里有点闲钱,想着做点卖水果的小买卖。给出两个数组m、n,用m[i]代表第i个...

    华为某次Java机试题

    介绍

    本次机试题,发生时间:2019年04月17日,19:00。

    上一次试题,发生时间:2019年04月03日,19:00。

    本次机试3题,均AC。

    1

    题目描述:
    给定一个数组,里面有6个整数,求这个数组能够表示的最大24进制的时间是多少,输出这个时间,无法表示输出invalid。

    输入描述:
    输入为一个整数数组,数组内有六个整数。
    输入整数数组长度为6,不需要考虑其他长度,元素值为0或者正整数,6个数字每个数字只能使用一次。

    输出描述:
    输出为一个24进制格式的时间,或者字符串“invalid”。

    示例1
    输入
    [0,2,3,0,5,6]
    输出
    23:56:00
    示例2
    输入
    [9,9,9,9,9,9]
    输出
    invalid

    备注:
    输出时间格式为xx:xx:xx格式。

    代码

    //直接暴力解决。
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Scanner;
    public class Main {
    	public static void main(String[] args) {
    		final String s = "invalid";
    		final String c = ":";
    		Scanner in = new Scanner(System.in);
    		String tempString = in.nextLine();
    		in.close();
    		tempString = tempString.substring(1, tempString.length() - 1);
    		String [] tempInt = tempString.split(",");
    		tempString = null;
    		int [] input = new int [6];
            for(int i = 0; i < 6; i ++) {
                input[i] = Integer.parseInt(tempInt[i]);
            }
            tempInt = null;
            Arrays.sort(input);
            ArrayList<Integer> list = new ArrayList<>();
            for(int i = 0; i < 6; i ++) {
            	list.add(input[i]);
            }
            input = null;
            StringBuilder output = new StringBuilder();
            int i = getSpeci(list, 3); //第一位
            if(i != -1 ) {
            	output.append(list.remove(i));
            } else {
            	System.out.print(s);
            	return ;
            }
            if(output.charAt(0) == '2') {
            	i = getSpeci(list, 4); //第二位
            	if(i != -1 ) {
            		output.append(list.remove(i));
            		output.append(c);
            	}else {
                	System.out.print(s);
                	return ;
                }
            } else {
            	i = getSpeci(list, 10); //第二位
            	if(i != -1 ) {
            		output.append(list.remove(i));
            		output.append(c);
            	}else {
                	System.out.print(s);
                	return ;
                }
            }
            i = getSpeci(list, 6); //第三位
            if(i != -1 ) {
        		output.append(list.remove(i));
        	}else {
            	System.out.print(s);
            	return ;
            }
            i = getSpeci(list, 10); //第四位
        	if(i != -1 ) {
        		output.append(list.remove(i));
        		output.append(c);
        	}else {
            	System.out.print(s);
            	return ;
            }
        	i = getSpeci(list, 6); //第五位
            if(i != -1 ) {
        		output.append(list.remove(i));
        	}else {
            	System.out.print(s);
            	return ;
            }
            i = getSpeci(list, 10); //第六位
        	if(i != -1 ) {
        		output.append(list.remove(i));
        	}else {
            	System.out.print(s);
            	return ;
            }
            System.out.print(output);
    	}
    	static int getSpeci(ArrayList<Integer> list, int speci) {
    		for(int i = list.size() - 1; i > -1; i --) {
    			if(list.get(i) < speci) {
    				return i;
    			}
    		}
    		return -1;
    	}
    }
    
    

    2

    题目描述:
    小王手里有点闲钱,想着做点卖水果的小买卖。给出两个数组m、n,用m[i]代表第i个水果的成本价,n[i]代表第i水果能卖出的价钱,假如现在有本钱k,试问最后最多能赚多少钱?

    说明:
    1 每种水果只需买一次,只能卖一次
    2 数组m、n大小不超过50
    3 数组元素为正整数,不超过1000

    输入描述:
    1 数组m、n
    2 本钱k
    备注:
    1 首行输入逗号分隔的数组m的元素值
    2 第二行输入逗号分隔的数组n的元素值
    3 第三行输入本钱

    输出描述:
    最多能赚取多少钱。

    示例1
    输入
    4,2,6,4
    5,3,8,7
    15
    输出
    22

    说明
    样例计算过程:
    先买前3种水果,全部卖出,再买第4种水果,再卖出,最后本金变为22。

    代码

    import java.util.Arrays;
    import java.util.Scanner;
    public class Main {
    	static class B implements Comparable<B> {
    		int m;
    		int n;
    		B(int m, int n) {
    			this.m = m;
    			this.n = n;
    		}
    		@Override
    		public int compareTo(B o) {
    			if(m > o.m) {
    				return 1;
    			}
    			if(m < o.m) {
    				return -1;
    			}
    			if(n > o.n) {
    				return -1;
    			}
    			if(n < o.n) {
    				return 1;
    			}
    			return 0;
    		}
    	}
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            String [] mm = in.nextLine().split(",");
            String [] nn = in.nextLine().split(",");
            int k = in.nextInt();
            B [] b = new B [mm.length];
            for(int i = 0; i < b.length; i ++) {
            	b[i] = new B(Integer.parseInt(mm[i]), Integer.parseInt(nn[i]));
            }
            mm = null;
            nn = null;
            Arrays.sort(b);
            for(int i = 0; i < b.length; i ++) {
            	if(k >= b[i].m && b[i].n > b[i].m) {
            		k += (b[i].n - b[i].m);
            	}
            }
            System.out.print(k);
            in.close();
            
        }
    }
    

    3

    题目描述
    某多处理器多道批处理系统一次允许讲所有作业调入内存,且能并行执行,其并行数等于处理器个数。该系统采用SJF的调度方式(最短作业优先,系统在调度时,总是优先调度执行处理时间最短的作业)。
    现给定处理器个数m,作业数n,每个作业的处理时间分别为t1, t2, … tn。
    当n>m时,首先处理时间短的m个作业进入处理器处理,其他的进入等待,当某个作业处理完成时,依次从等待队列中取出处理时间最短的作业进入处理。
    求系统处理完所有作业的耗时为多少?
    注:不考虑作业切换的消耗。

    输入描述:
    输入2行,第一行为2个整数(采用空格分隔),分别标识处理器个数m个作业数n;第二行输入n个整数(采用空格分隔),标识每个作业的处理时长t1, t2,… tn。0<m, n<100,0<t1, t2,… tn<100。

    输出描述:
    输出处理总时长

    示例1
    输入
    3 5
    8 4 3 1 10
    输出
    13

    备注:
    注:不用考虑输入合法性。

    代码:

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Scanner;
    public class Main{
    	static class CPU{
    		int time;
    		CPU() {
    			time = 0;
    		}
    	}
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		int m = in.nextInt();
    		int n = in.nextInt();
    		int [] task = new int [n];
    		for(int i = 0; i < n; i ++) {
    			task[i] = in.nextInt();
    		}
    		in.close();
    		ArrayList<CPU> cpu = new ArrayList<>();
    		for(int i = 0; i < m; i ++) {
    			cpu.add(new CPU());
    		}
    		Arrays.sort(task);
    		int total = 0;
    		int index = 0;
    		while(true) {
    			int i = getZero(cpu);
    			if(i == 101) {
    				break;
    			}
    			if(i >= 0) {
    				if(index == n) {
    					cpu.remove(i);
    				} else {
    					cpu.get(i).time = task[index];
    					index ++;
    				}
    			} else {
    				total -= i;
    			}
    		}
    		System.out.print(total);
    	}
    	static int getZero(ArrayList<CPU> cpu) {
    		if(cpu.size() == 0) {
    			return 101;
    		}
    		int min = 100;
    		for(int i = 0; i < cpu.size(); i ++) {
    			if(cpu.get(i).time == 0) {
    				return i;
    			}
    			min = min > cpu.get(i).time ? cpu.get(i).time : min;
    		}
    		for(int i = 0; i < cpu.size(); i ++) {
    			cpu.get(i).time -= min;
    		}
    		return -min;
    	}
    }
    
    
    展开全文
  • 华为优招机试题还是老样子的三道大题,分值为100、200、300。理论上是答对一道即可过关,但这是理论上的。...解答:计数排序,没有什么难度(计数排序是华为机试题出现次数最多的排序方法,没有之一)...

    华为优招机试题还是老样子的三道大题,分值为100、200、300。理论上是答对一道即可过关,但这是理论上的。下面是2018年8月1日批次的华为优招机试题详解。

     

    重复字符排序

    题目描述:找出输入字符串中的重复字符,再根据ASCII码把重复的字符从小到大排序。

    例如:输入ABCABCdd,输出ABCd。

    解答:计数排序,没有什么难度(计数排序是华为机试题出现次数最多的排序方法,没有之一):

    #include <iostream>
    using namespace std;
    #include <string>
    
    int main()
    {
    	string s;
    	getline(cin, s);
    	int count[200] = { 0 };
    	for (int i = 0; i < s.length(); i++)
    		count[s.at(i)]++;
    	for (int i = 0; i < 127; i++) {
    		if (count[i] > 1)
    			cout << (char)i;
    	}
    
    	return 0;
    }

     

    重复字符最长串

    题目描述:给定一串字符,里面有些字符有连续出现的特点,请寻找这些连续出现字符中最长的串,如果最长的串有多个,请输出字符ASCII码最小的那一串。

    例如:输入aaabbbbbcccccccczzzzzzzz,输出cccccccc。

    解答:利用两个长度为2的数组,一个存放当前字符及其连续重复长度,另一个存放历史最长重复的字符及其长度值。只要做好逻辑思路就应该能轻松做完:

    #include <iostream>
    using namespace std;
    #include <string>
    
    int main()
    {
    	string s;
    	getline(cin, s);
    	char c[2] = { s.at(0) };
    	int num[2] = { 1 };
    	for (int i = 1; i < s.length(); i++) {
    		if (s.at(i) == c[0])
    			num[0]++;
    		else {
    			if (num[0] > num[1] || (num[0] == num[1] && c[0] < c[1])) {
    				c[1] = c[0];
    				num[1] = num[0];
    			}
    			c[0] = s.at(i);
    			num[0] = 1;
    			
    		}
    	}
    	if (num[0] > num[1] || (num[0] == num[1] && c[0] < c[1])) {
    		c[1] = c[0];
    		num[1] = num[0];
    	}
    	for (int i = 0; i < num[1]; i++)
    		cout << c[1];
    
    	return 0;
    }

     

    小镇广告牌

    题目描述:已知某小镇的房子沿直线分布,给定一个有序整数数组arr,里面的每个镇代表小镇每栋房子的一维坐标点。现在需要建N个广告牌,广告牌只能建立在这些坐标点上,使得每个坐标点离广告牌的总距离最短,求这个最短的总距离。

    输入描述:输入最后一个为N值,其余的为arr值,需要考生自行处理。

    例如:输入1 2 3 4 5 1000 2,输出6。

    解答:这是一条经典的动态规划的题目:

    设置一个数组dis[i][j]

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int arr[100] = { 0 };
    	int m = 0, n;		//m:小镇个数;n:广告牌个数
    	int x, dis[100][100] = { 0 };
    	int total[100][100] = { 0 };
    
    	while (cin >> x)
    		arr[m++] = x;
    	n = arr[--m];
    
    	for (int i = 0; i < m; i++) {
    		for (int j = i; j < m; j++) {
    			for (int k = i; k <= j; k++)
    				dis[i][j] += abs(arr[(i + j) / 2] - arr[k]);
    		}
    	}
    
    	for (int i = 0; i < m; i++)
    		total[i][1] = dis[i][m - 1];
    	for (int i = 2; i <= n; i++) {
    		for (int j = 0; j < m; j++) {
    			for (int k = j; k <= m-i; k++)
    				total[j][i] = dis[j][k] + total[k + 1][i - 1];
    		}
    	}
    
    	cout << total[0][n] << endl;
    
    	return 0;
    }

     

    展开全文
  • 华为机试题整理

    2020-08-12 23:28:55
    1、整数反转后求和 #include <iostream> using namespace std; int reversenum(int x) { int a=0; while (x>0) { a=a*10+x%10; x/=10; } return a; } int reverseAdd(int a,int b) ...70000).

    1、整数反转后求和

    #include <iostream>
    using namespace  std;
    int reversenum(int x)
    {
        int a=0;
        while (x>0) {
            a=a*10+x%10;
            x/=10;
        }
        return  a;
    }
    int reverseAdd(int a,int b)
    {
        if(a<1||a>70000||b<1||b>70000){
            return -1;
        }
        int num1=reversenum(a);
        int num2=reversenum(b);
        int sum=num1+num2;
        return sum;
    }
    
    int main()
    {
       int x;
       int y;
       cin>>x>>y;
       int sum=reverseAdd(x,y);
       cout<<sum;
       return  0;
    }
    

    2.深度优先遍历(DFS他娘的现在和动态规划变成热门)

     

      

     

    #include <iostream>
    #include <vector>
    using namespace  std;
    const int inf= 0x7f7f7f7f;
    //时间花费矩阵
    int a[][7]={
        {0},
            {0, 0, 2, 10, 5, 3, -1},
            {0, -1, 0, 12, -1, -1, 10},
            {0, -1, -1, 0, -1, 7, -1},
            {0, 2, -1, -1, 0, 2, -1},
            {0, 4, -1, -1, 1, 0, -1},
            {0, 3, -1, 1, 0, 2, 0}
    };
    int x,y;//目的地,大雾城市
    int res;
    int used[10];//record falg
    int d[50];//记录路
    int haveded[50];//走过的路
    int anscost=inf;
    int anspath;
    /*====出发地,花费时间,路径个数=====*/
    void dfs(int now,int cost,int path)
    {
     if(now==x){
         if(cost<anscost){
             anscost=cost;
             for(int i=0;i<path;i++){
                 haveded[i]=d[i];
             }
             anspath=path;
         }
         return;
     }
     for(int i=1;i<=6;i++){
         if(i==y){
             continue;
         }
         if(used[i]==0&&a[now][i]>=0){
             used[i]=1;
             d[path]=i;
             dfs(i,cost+a[now][i],path+1);
             used[i]=0;
         }
     }
    }
    int main()
    {
        static char emp[] = "";
        static char col[] = ", ";
        cin>>x>>y;//出差城市,大雾城市
    
        if (x == 5)
        {
            cout<<"0\n[]\n";
            return 0;//出差为5的话,0不可达
        }
        if (y == 5)
        {
            cout<<"1000\n[]\n";
            return 0;//大雾为5的话,1000不可达
        }
    
        d[0] = 5;
        used[5] = 1;
    
        dfs(5, 0, 1);//核心算法
    
        char *p = emp;
        if (anscost == inf)
        {
            printf("1000\n[]\n");
        }
        else
        {
            cout<<anscost<<"\n[";
            for (int i = 0; i < anspath; i++)
            {
                cout<<p<<haveded[i];
              p = col;
            }
            printf("]\n");
          }
      return 0;
    }
    

     

     3.

    题目描述

    请设计一个算法完成两个超长正整数的加法。

    输入描述:

    输入两个字符串数字

    输出描述:

    输出相加后的结果,string型

    #include<iostream>
    #include <string>
    #include <algorithm>
    using namespace  std;
    
    int main()
    {
        string a;
        string b;
        cin>>a>>b;
        int n1=a.size();
        int n2=b.size();
        string x,y;
        for(int i=0;i<n1;i++){
            x[i]=a[n1-1-i];
        }
        for(int i=0;i<n2;i++){
            y[i]=b[n2-1-i];
        }
    
        if(n1<n2){
            for(int i=n1;i<n2;i++){
                x[i]='0';
            }
    
        }else{
           for(int i=n2;i<n1;i++){
                y[i]='0';
           }
        }
        int sum[100];
        int carry=0;
        int n=max(n1,n2);
        for(int i=0;i<n;i++){
            int c=x[i]-48+y[i]-48+carry;
            if(c<10){
                sum[i]=c;
                carry=0;
            }else{
              sum[i]=c-10;
              carry=1;
            }
        }
        if(carry==1){
            sum[n]=1;
            n=n+1;
        }
    //    for(int j=0;j<n;j++)
    //         cout<<sum[n-1-j];
    //     cout<<endl;
        string res[100];
        for(int j=0;j<n;j++){
            res[j]=sum[n-1-j]+'0';
    
        }
        for(int j=0;j<n;j++){
            cout<<res[j];
        }
        cout<<endl;
        return 0;
    }
    

    4. 

     

    输入描述:

    输入一个字符串。

    输出描述:

    输出字符串中最长的数字字符串和它的长度。如果有相同长度的串,则要一块儿输出,但是长度还是一串的长度

    示例1

    输入

    abcd12345ed125ss123058789
    

    输出

    123058789,9
    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    
    int main()
    {
        string str;
    
        while(cin>>str)
        {
            string tmp;
            vector<string> arr;
    
            for(int i=0;i<=str.length();i++)
            {
                if(str[i]>='0' && str[i]<='9')
                {
                    tmp+=str[i];
                }
                else
                {
                    if(tmp.length()!=0)
                    {
                        arr.push_back(tmp);
                    }
                    tmp.clear();
                }
            }
    
            int max=0;
            int length=0;
    
            for(int i=0;i<arr.size();i++)
            {
                if(max<(arr[i]).length())
                {
                    max=(arr[i]).length();
                    length=max;
                }
            }
    
            for(int i=0;i<arr.size();i++)
            {
                if(max==(arr[i]).length())
                {
                    cout<<arr[i]<<" ";
                }
    
            }
            cout<<","<<length<<endl;
        }
        return 0;
    }
    

     5.计算1的的个数

    int countInnums(int iNum){
        int iCount=0;
        iNum=abs(iNum);
        while(iNum){
            iCount++;
            iNum=iNum&(iNum-1);
        }
        return iCount;
    }

     

    展开全文
  • 牛客网华为机试题(JavaScript)

    千次阅读 2020-03-22 13:49:38
    最近在牛客网刷华为机试题,遇到了很多坑,记录: 每一道题目都经过自己实践验证 华为机试题 牛客网在javascript V8引擎下处理输入输出如下: 利用了readline()接收输入的每一行,多行处理可以用多个readline() 输出...
  • 华为机试题+答案

    万次阅读 2018-05-19 18:22:46
    //freopen("C:\\Users\\Ethan\\Desktop\\huawei3.txt", "r", stdin); int n, m; while (cin >> n >> m) { priority_queue, vector, greater<int> > s; int w; for (int i = 1; i ; i++) s.push(0); for (int ...
  • 华为机试题Java实现(附详解)

    千次阅读 2020-06-05 16:08:20
    华为机试题Java实现(附详解,持续更新) 本文章是我做的华为机试题目,有些是自己写的,有些是参考解答,都做了详细备注,都能看懂,有时间陆陆续更新完。 1. 计算一个字符串最后一个单词长度,单词用空格隔开 思路:...
  • 华为机试题

    2019-12-09 00:39:42
    华为机试题 1.根据输入的日期,计算是这一年的第几天。。 详细描述: 输入某年某月某日,判断这一天是这一年的第几天?。 import java.util.Scanner; public class Day { public static void main(String[] ...
  • 华为机试题python版节选(基础编程题)

    万次阅读 多人点赞 2019-03-06 18:05:44
    试题 1.【输入】计算字符串最后一个单词的长度,单词以空格隔开。 输入:hello world 输出:5 a=input().split() if(len(a)>=2): print(len(a[-1])) else: print(len(a[0])) 这里经过split()后,...
  • 两个程序几乎一模一样,但因输入方式不同,一个可以得到正确结果,而另一个却不行 题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000...
  • 牛客网--华为机试题

    2020-12-17 23:56:47
    持续更新代码仓库地址 github地址:https://github.com/miniWiseNut/algorithm-training.git. 华为机试地址. 华为机试(部分题目): 代码目录:
  • 牛客网华为机试题

    2020-03-22 15:56:41
    1.汽水瓶 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,...
  • 4.14 华为机试题

    2021-04-15 10:56:45
    第一题 给出一个字符串s(仅包含小写英文字母和括号),请你按照从内层到外层的顺序,逐层反转每对匹配括号内包含的字符串,并返回最终的结果。 输入描述:输入为一行带有括号的字符串(只包含英文小写字母和左右小...
  • 华为机试题练习(一)

    千次阅读 2019-08-13 20:33:12
    1.写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。 var str = readline().toLowerCase(); var item = readline().toLowerCase();...
  • 华为机试题2020.zip

    2019-09-17 16:07:09
    内容包括第二,与第三题的解题思路与代码,第一题为经典模型就没放上去
  • 2019华为机试题 解析文本

    千次阅读 2019-09-04 09:45:05
    解析文本 题目描述 有一种表格数据需要存储在文件中,表格中的每一行,由若干个字段组成,每个字段可以是整数或字符串,设计一种存储格式,采用文本的方式对表格数据进行存储。文本文件中的每一行,代表了表格数据中...
  • 华为机试题(Java)

    千次阅读 2018-09-06 21:16:52
    package com.huawei.test2017.test1; import java.util.Scanner; public class test1 { public static void main (String[] args) { Scanner sc = new Scanner(System. in ); System. out ....
  • 1.JAVA题目2-3级 请编写一个函数(允许增加子函数),计算nxm的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能...
  • 华为机试题---python3

    2020-01-13 12:23:08
    题1 计算字符串最后一个单词的长度,单词以空格隔开。 s = input() print(len(s.split(’ ')[-1])) 题2 写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。...
  • 2017最全华为机试题C/C++(含答案源码),包含111道上机考试题,欢迎下载,觉得资源好请好评。
  • 正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。 输入 5 7 输出 35 while(line = readline()){ var arr = line.split(' ').map(function(item){ ...
  • 华为机试题-16-购物单

    2020-05-01 11:02:43
    转载1 转载2
  • #牛客网华为机试题后感 2-14 1.接受一个只包含小写字母的字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000) def switch(): str = input() print(str[::-1]) switch() 解题思路: 5种方法的比较: ...
  • 最近做了几套华为机试题,今天有时间,把之前写的几套代码全都贴出来。题目都只记得个大概,将就着看吧,不过代码都是完整的,自认为写的还行。 题目描述 大概意思是:集五福,人数≤10,每个人集完五福后,...
  • 第一题题目描述 五键键盘只可以输入a、ctrl+c、ctrl+x、ctrl+v、ctrl+a,对应的功能为 a:输出到屏幕上a字母 ctrl+c:复制选定内容到剪贴板 ctrl+x:复制选定内容到剪贴板并且清空当前选定内容 ...
  • 牛客网华为机试题训练(JavaScript Node环境) 文章目录牛客网华为机试题训练(JavaScript Node环境)前言一、题目1. HJ11 数字颠倒2.HJ22 汽水瓶总结 前言 题目摘录牛客网华为机试题,答案为作者亲自操刀编码。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,478
精华内容 1,791
关键字:

华为机试题