2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 华为OD机考--TVL解码--GPU算力--猴子爬台阶--两个数组前K对最小和--勾股数C++实现

华为OD机考--TVL解码--GPU算力--猴子爬台阶--两个数组前K对最小和--勾股数C++实现

时间:2019-01-19 03:25:09

相关推荐

华为OD机考--TVL解码--GPU算力--猴子爬台阶--两个数组前K对最小和--勾股数C++实现

勾股数 题目0001

题目描述:

如果三个正整数A、B、C ,A²+B²=C²则为勾股数

如果ABC之间两两互质,即A与B,A与C,B与C均互质没有公约数,

则称其为勾股数元组。

请求出给定n~m范围内所有的勾股数元组

输入描述

起始范围

1 < n < 10000

n < m < 10000

输出描述

ABC保证A<B<C

输出格式A B C

多组勾股数元组,按照A B C升序的排序方式输出。

若给定范围内,找不到勾股数元组时,输出Na

示例一

输入

120

输出

3 4 55 12 138 15 17

示例二

输入

510

输出

Na

源码

//// Created by HANWENKE on /8/27.//#include <iostream>#include <vector>#include <algorithm>using namespace std;bool prime(const int &x,const int &y){if(x==1||y==1){return false;}int mmin=min(x,y);for(int i=2;i<=mmin;i++){if(x%i==0&&y%i==0){return false;}}return true;}int main(){int n,m;cin>>n>>m;vector<int>temp;//记录临时元素vector<vector<int>>res;//记录最终结果bool flag= true;//三个元素互质--必定不能够相等for(int a=n;a<m;a++){for(int b=a+1;b<m;b++){for(int c=b+1;c<m;c++){if(prime(a,b)&& prime(c,b)&& prime(a,c)){if(a*a+b*b==c*c){temp={a,b,c};flag= false;res.push_back(temp);temp.clear();}}}}}if(!flag){for(int i=0;i<res.size();i++){for(int j=0;j<res[i].size();j++){cout<<res[i][j]<<" ";}cout<<endl;}}else{cout<<"Na"<<endl;}return 0;}

两个数组前K对-合最小题目0002

题目描述:

给定两个整数数组,arr1、arr2,数组元素按升序排列;

假设从arr1、arr2中分别取出一个元素,可构成一对元素;

现在需要取出k对元素,并对取出的所有元素求和,计算和的最小值;

注意:两对元素对应arr1、arr2的下标是相同的,视为同一对元素。

输入描述

输入两行数组arr1、arr2

每行首个数字为数组大小size,0 < size <= 100

arr1,arr2中的每个元素e,0< e <1000

接下来一行,正整数k0 < k <= arr1.size * arr2.size

输出描述

满足要求的最小值

示例一

输入

1 1 21 2 32

输出

4

说明:

用例中需要取两个元素,取第一个数组第0个元素与第二个数组第0个元素组成一个元素[1,1];

取第一个数组第1个元素与第二个数组第0个元素组成一个元素[1,1];

求和为1+1+1+1=4 ,满足要求最小

源码

//// Created by HANWENKE on /8/27.//#include <iostream>#include <vector>#include <string>#include <sstream>#include <algorithm>using namespace std;class Solution{public:void Cin(vector<int>&arr1,vector<int>&arr2,int &k){string s1;getline(cin,s1);/*第一步:接收字符串 s ;第二步:遍历字符串 s ,把 s 中的逗号换成空格;第三步:通过 istringstream 类重新读取字符串 s ;*/istringstream ss(s1);int temp;while(ss>>temp){arr1.push_back(temp);}string s2;getline(cin,s2);istringstream s(s2);while(s>>temp){arr2.push_back(temp);}cin>>k;}void getsum(vector<int>&arr1,vector<int>&arr2,int &k){int length=arr1.size()*arr2.size();vector<int>sum;sum.reserve(length);for(auto x:arr1){for(auto y:arr2){sum.push_back(x+y);}}int res=0;sort(sum.begin(),sum.end());for(int i=0;i<k;i++){res+=sum[i];}cout<<res;}};int main(){vector<int>arr1;vector<int>arr2;arr1.reserve(100);arr2.reserve(100);int k;Solution l;l.Cin(arr1,arr2,k);l.getsum(arr1,arr2,k);return 0;}

TVL 解码– 题目0003

题目描述:

TLV编码是按TagLengthValue格式进行编码的,一段码流中的信元用tag标识,tag在码流中唯一不重复,length表示信元value的长度,value表示信元的值,码流以某信元的tag开头,tag固定占一个字节,length固定占两个字节,字节序为小端序,现给定tlv格式编码的码流以及需要解码的信元tag,请输出该信元的value。

输入码流的16进制字符中,不包括小写字母;

且要求输出的16进制字符串中也不要包含小写字母;

码流字符串的最大长度不超过50000个字节。

输入描述

第一行为第一个字符串 ,表示待解码信元的tag;

输入第二行为一个字符串, 表示待解码的16进制码流;

字节之间用空格分割。

输出描述

输出一个字符串,表示待解码信元以16进制表示的value。

示例一

输入

3132 01 00 AE 90 02 00 01 02 30 03 00 AB 32 31 31 02 00 32 33 33 01 00

输出

32 33

说明

需要解析的信源的tag是31;

从码流的起始处开始匹配,tag为32的信元长度为1(01 00,小端序表示为1);

第二个信元的tag为90 其长度为2;

第三个信元的tag为30 其长度为3;

第四个信元的tag为31 其长度为2(02 00);

所以返回长度后面的两个字节即可 为 32 33。

源码

//// Created by HANWENKE on /8/27.///*大端模式:高位字节存放在内存的低地址,低位字节存放在高地址* 小端模式:低位字节存放在低地址,高位字节存放在高地址*/#include <iostream>#include <sstream>#include <string.h>#include <vector>using namespace std;int main(){string s1;getline(cin,s1);string s2;getline(cin,s2);istringstream s(s2);vector<string >res;string temp;while(s>>temp){res.push_back(temp);}int n=0;stringstream ss;for(int i=0;i<res.size();){string t=res[i+2]+res[i+1];ss<<hex<<t;ss>>n;ss.clear();if(s1==res[i]){string rs;for(int j=i+3;j<i+3+n;j++){rs+=res[j];rs+=" ";}cout<<rs<<endl;break;}else{i+=n+3;}}/* cout<<s1<<endl;for(auto x:res){cout<<x <<" ";}*/return 0;}

猴子爬台阶 题目0004

题目描述:

一天一只顽猴想要从山脚爬到山顶

途中经过一个有n个台阶的阶梯,但是这个猴子有个习惯,每一次只跳1步或3步

试问?猴子通过这个阶梯有多少种不同的跳跃方式

输入描述

输入只有一个这个数n0 < n < 50

此阶梯有多个台阶

输出描述

有多少种跳跃方式

示例一

输入

50

输出

122106097

示例二

输入

3

输出

2

源码

//// Created by HANWENKE on /8/27.//#include <iostream>using namespace std;void solution(const int &n){//第一个台阶一种方式,第2个台阶也只有一种方式,第3个台阶有两种方式int dp[n];dp[0]=0;dp[1]=1;dp[2]=1;dp[3]=2;if(n<=3){cout<< dp[n];return;}for(int i=4;i<=n;i++){dp[i]=dp[i-1]+dp[i-3];}cout<<dp[n];}int main(){int n;cin>>n;solution(n);return 0;}

GPU算力题目0005

为了充分发挥Gpu算力,

需要尽可能多的将任务交给GPU执行,

现在有一个任务数组,

数组元素表示在这1s内新增的任务个数,

且每秒都有新增任务,

假设GPU最多一次执行n个任务,

一次执行耗时1s,

在保证Gpu不空闲的情况下,最少需要多长时间执行完成。

输入描述

第一个参数为gpu最多执行的任务个数

取值范围1~10000

第二个参数为任务数组的长度

取值范围1~10000

第三个参数为任务数组

数字范围1~10000

输出描述

执行完所有任务需要多少秒

示例一

输入

351 2 3 4 5

输出

6

说明

一次最多执行3个任务,最少耗时6s

示例二

输入

455 4 1 1 1

输出

5

说明

一次最多执行4个任务,最少耗时5s

源码

//// Created by HANWENKE on /8/27.//#include <iostream>#include <vector>using namespace std;void solution(int &n,vector<int>&temp){int time=0;int remaining=0;//如果当前任务处理不完、剩下的时间for(auto count:temp){if(remaining+count>n){remaining=remaining+count-n;}else{remaining=0;}time++;}time+=remaining/n;if(remaining%n>0){time++;}cout<<time<<endl;}int main(){int n;//cup最多执行的个数cin>>n;//数组的长度--这一秒新增的任务个数int length;cin>>length;vector<int>temp;temp.reserve(n);int x;for(int i=0;i<length;i++){cin>>x;temp.push_back(x);}solution(n,temp);return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。