首页 > 编程知识 正文

华为硬件机考题库2020,华为手机附屏怎么打开

时间:2023-05-04 01:20:47 阅读:144768 作者:1259

第一题题目描述

数字键盘只能输入a、ctrl c、ctrl x、ctrl v和ctrl a。 对应的功能如下

a :输出到画面的a文字

ctrl c :将选定内容复制到剪贴板

ctrl x :将所选内容复制到剪贴板并清空当前选择

ctrl v :将剪贴板内容输出到屏幕

ctrl a :选定屏幕上的所有内容

现在,表示与1、2、3、4、5的顺序对应的操作,输入数字表示对应的操作,输出操作后的画面上应该有的字母的数量。

输入输出示例:

输入1 1 5 3 2输出0

输入1 1 5 3 4 1输出3

思路分析:

请注意ctrl a的情况。 所有输入字符a、ctrl c、ctrl x和ctrl v的结果都将受到是否选择的影响。

因为每个步骤的操作结果至少存储在一个步骤中,所以不一定要直接打开3100个三维数组,而可以通过一个32个三维数组来完成整个操作。 类似于在数组中实现循环队列。

# includeiostreamusingnamespacestd; int main () {int arr[3][100]; //arr[0][]存储输入操作,arr[1][]存储输入操作后画面上的字符数,arr[2][]存储输入操作后剪贴板上的字符数int i=0;//读取一行操作数while (cinarr [0] [ I ] ) if ) arr[0][I]==1) /输入a字符(if(I==0) /字符数初始化) arr[1] ) I=arr[2][i]=0; }elseif(arr[0][I-1]==5)如果存在ctrl a ({ arr [1] [ I ]=1; arr[2][i]=arr[2][i - 1]; }没有}else///ctrla时{arr[1][i]=1 arr[1][i - 1]; arr[2][i]=arr[2][i - 1]; }elseif(arr[0][I]==2)如果输入ctrl c (if (I==0) ) {arr[1][i]=0; arr[2][i]=0; }elseif(arr[0][I-1]==5) {arr[1][i]=arr[1][i - 1]; arr[2][i]=arr[1][i - 1]; 如果存在ctrl a,则剪贴板中的字符数变为上一个屏幕中的字符数(else ) arr[1][I]=arr[1][I-1]; arr[2][i]=0; 如果没有ctrl a,剪贴板上的字符数为0 } else if (输入arr [0] [ I ]==3) ctrl x (if ) I==0) {arr[1][i]=0; arr[2][i]=0; }elseif(arr[0][I-1]==5) {arr[1][i]=0; //屏幕字符数清零arr[2][i]=arr[1][i - 1]; 如果存在ctrl a,则剪贴板中的字符数变为上一个屏幕中的字符数(else ) arr[1][I]=arr[1][I-1]; arr[2][i]=0; 如果没有ctrl a,则剪贴板上的字符数为}elseif(arr[0][I]==4)输入ctrl v (if (I==0) ) {arr[1][i]=0; arr[2][i]=0; }elseif(arr[0][I-1]==5) {arr[1][i]=arr[2][i - 1]; 有ctrl a时屏幕字符数为上一个剪贴板的字符数arr[2][i]=arr[2][i - 1]; } else { arr [1] [ I ]=arr [1] [ I-1 ] arr [2] [ I-1 ]; arr[2][i]=arr[2][i - 1]; }elseif(arr[0][I]==5)如果输入ctrl a (if ) I==0) {arr[1][i]=0; arr[2][i]=0; }输入}else//ctrla不会改变以下字符数{arr[1][i]=arr[1][i - 1]; arr[2][i]=arr[2][i - 1]; (I; //结果cout arr[1][i - 1]; 返回0; } 第二题题目描述

输入数组长度length3,然后输入一组数据。 其中,只有一个数据满足A=B 2C,求出各自的值,按照a、b、c的顺序输出,无解返回0。

(注意: a、b、c不能为相同的值。 也就是说,地址相同,值也相同)

输入1

4

7 3 0 2

输出1

7 3 2

输入2

3

0 0 1

输出2

0

思路分析

思路1 :分析表明,a必然是三者中的最大值,b和c不确定谁打谁小,排序后可以从最大值开始暴力求解,最大值为a,剩下的为

的值进行排列组合找到解,所有组合都不符合的话就是无解,依次选择次大值作为A值,重复上述操作直到子数组变为只有三个元素。

思路二:同思路一将数组排序(升序),选择最大值作为A值,设两个指针B和C分别指向最小值和小于A的最大值,如果B+2C>A那么C指针左移,如果B+2C<A那么B指针右移,当某一指针移动到头还没有解,那么将A的指针左移一个位置重复上述操作即可。有解时直接输出结果结束程序(B和C不指向同一个数),不然直到子数组只有三个元素输出0结束程序。

//第二题#include <iostream>using namespace std;int main(){int length;//定义数组长度cin >> length;int arr[100];//定义数组for (int i = 0; i < length; i++){cin >> arr[i];//数组输入}//对数组进行选择排序(升序)int temp;for (int i = 0; i < length; i++){temp = arr[i];for (int j = i; j < length; j++){if (temp > arr[j]){temp = arr[j];arr[j] = arr[i];arr[i]=temp;}}}//暴力破解法一/*int flag=0;for (int i=length-1;i>1;i--){for (int j = 0; j <= i-1; j++){for (int k=0;k<=i-1;k++){if ((arr[j] + 2 * arr[k] == arr[i])&&(j!=k)&&(flag==0)){cout << arr[i] << " " << arr[j] << " " << arr[k];flag = 1;}}}}*///指针解法二int flag = 0;//标志位,是否有解for (int i = length - 1; i > 1; i--)//有序数组从后向前确定A值{int pointB=0, pointC=i-1;//两个指针指向B和Cwhile ((pointB<i)&&(pointC>=0))//当指针满足条件时循环{if (arr[i] > arr[pointB] + 2 * arr[pointC])//A>B+2C时,B的指针右移pointB++;else if (arr[i] < arr[pointB] + 2 * arr[pointC])//A<B+2C时,C的指针左移pointC--;else if (arr[i] == arr[pointB] + 2 * arr[pointC]){if (pointB != pointC) //满足条件且B,C指针指向不是同一个地址时输出结果结束程序{cout << arr[i] << " " << arr[pointB] << " " << arr[pointC];return 1;}else//若指向同一地址,则将不会越界的指针对应加减{if (pointB < i - 1)pointB++;else if (pointC > 0)pointC--;}}}}//无满足条件的解时cout<<flag;return 0;}

第三题题目描述

输入数组A和B,两数组包含元素数目相同,当A数组元素重新排列后,对应位置都大于B数组的组合种类有多少种?
输入输出示例:
输入:
4 6 2
1 3 5
输出: 1
输入:
7 6 2
1 3 5
输出: 2

思路分析:

输入数据后,找到B数组对应的数据在A数组中有几个值比前者大,例如B[1]在A数组中比3个数要小,那么我们把对应的结果存储在数组C中,即C[1]=3。C数组构建完成后,对C数组进行排序(升序)。
如果第一个数据为0,那么直接返回0,即不存在这样的组合。
否则进行计算
if(i==0),result=C[0];
else result*=(C[i]-i);
这里对计算式进行一个解释,在B数组中一个比较小的数b1和一个比较大的数b2相比,在A中会有更多的数比b1大,就是说c1>c2,c1里面包含了c2代表的数字,所以优先满足小的数先选择,大的数依次减少选择的可能数,例如c2*(c1-1)。

#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){int value;vector<int> A,B,C;//读入A数组数据cin >> value;A.push_back(value);while (cin.get() != 'n'){cin >> value;A.push_back(value);}//读入B数组数据cin >> value;B.push_back(value);while (cin.get() != 'n'){cin >> value;B.push_back(value);}//统计B数组所对应的每一项值在A数组中有几个值会大于该值for (int i = 0; i < B.size(); i++){int num = 0;for (int j = 0; j < A.size(); j++){if (B[i]<A[j]){num++;}}C.push_back(num);}//将结果进行排序sort(C.begin(),C.end());//排列组合计算结果if (C[0] == 0)cout << 0;else {int result=1;for (int i = 0; i < C.size(); i++){if (i == 0)result *= C[i];elseresult *= (C[i] - i);}cout << result;}return 0;}

-----------------------------------------------------------------------------------------------------------------------------------------------------
如果本文对你有所帮助,请不要忘了点赞、收藏哦!!!
-----------------------------------------------------------------------------------------------------------------------------------------------------

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。