阿里笔试3.30
题目一:
第一题,第一行输入:n,m,k
表示n个养鸡场,m天,每个鸡场增加k只鸡
第二行输入:n个数,分别代表每个鸡场里面鸡的数量。
题意:每天每个鸡场增加k个鸡,每天结束找到最多数量的鸡场,使之减半。
输出:m天后所有鸡场的数量总和
用例输入:3 3 100
表示n个养鸡场,m天,每个鸡场增加k只鸡
第二行输入:n个数,分别代表每个鸡场里面鸡的数量。
题意:每天每个鸡场增加k个鸡,每天结束找到最多数量的鸡场,使之减半。
输出:m天后所有鸡场的数量总和
用例输入:3 3 100
100 200 400
输出:925
void findmaxdex(vector<int>& arr, int n) { int maxdex=0; for(int i=1; i<n; i++) { if(arr[i] > arr[maxdex]) maxdex = i; } for(int i=0; i<n; i++) { if(arr[i] == arr[maxdex]) arr[i] /= 2; } } void addarr(vector<int>& arr, int n, int k) { for(int i=0; i<n; i++) { arr[i] += k; } } int main() { int n, m, k; cin >> n >> m >> k; vector<int> arr(n); for(int i=0; i<n; i++) cin >> arr[i]; for(int i=0; i<m; i++) { addarr(arr, n, k); //每天增加k只小鸡 findmaxdex(arr, n); //每天结束最大的鸡场的鸡减半 } int ans = 0; //保存所有鸡场的鸡的数量 for(int i=0; i<n; i++) { ans += arr[i]; } cout << ans; return 0; }测试用例通过,保存调试通过0% 求大佬解惑 哭哭哭~~~
题目二:
第二题,第一行输入:n
第二行输入:n个数,组成数组。
输出:所有子序列的最大值的期望的和,保留6位小数
第二行输入:n个数,组成数组。
输出:所有子序列的最大值的期望的和,保留6位小数
测试用例:输入:3
1 2 3
输出:2.333333
int findmax(int n) { if(n == 0) return 0; else if(n == 1) return 1; else if(n == 2) return 3; else return findmax(n-1)+n; } double getMaxE(vector<int>& arr, int n) { if(arr.empty()) return 0; int ans=0, tmp=0,num=0; for(int i=0; i<n; i++) { tmp = INT_MIN; for(int j=i; j<n; j++) { num++; tmp = tmp > arr[j] ? tmp: arr[j]; ans += tmp; } } return ans*1.0/num; } int main() { int n; while(cin >> n) { vector<int> arr(n); for(int i=0; i<n; i++) cin >> arr[i]; int max = findmax(n); double ans = 0; for(int i=0; i<n; i++) { ans += (((i+1)*1.0)/max)*arr[i]; } cout << ans << endl; cout << getMaxE(arr, n) << endl; } return 0; }
考完之后写的代码 没有OJ测试, 提交的代码不是这一份,体检0%通过 !!!!
大佬看完后期待,评论解惑
#阿里笔试2020##阿里巴巴##笔试题目#