阿里笔试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##阿里巴巴##笔试题目#