不是VIP会员,不能显示答案

题目解答

题目:
# include <iostream>
using namespace std;
const int maxn=100005;
int n;
int a[maxn];
int b[maxn];
void solve(int l, int r)
{
	if (l==r) return ;
	int mid=(l+r)/2;
	solve(l, mid); solve(mid+1,r);
	int i=1,j=mid+1,k=1;
	while(i<=mid &&j<=r)
	{
		if (a[i]<=a[j]) b[k++]=a[i++];
		else b[k++]=a[j++]; 
	}
	while(i<=mid) b[k++]=a[i++];
	while(j<=r) b[k++]=a[j++];
	for (int i=l; i<=r; i++) a[i]=b[i]; 
}
int main(){
	cin>>n;
	for (int i=1; i<=n; i++) cin>>a[i];
	solve(1,n);
	int ans=0;
	for (int i=1; i<=n; i++) ans=ans+a[i]*i;
	cout<<ans<<endl;
	return 0;
}


判断题

1) 即使a中有重复的数字,该程序仍能正常运行并输出正确答案。( )

A.正确
B.错误
2) 当运行完25行后,a数组单调不增。( )
A.正确
B.错误


选择题

3) 当输入如下时,n 1 2 3.....n 输出答案为( )。

A.n*n
B.n*(n+1)/2
C.n*(n+1)+(n+2)/6
D.n*(n+1)*(2*n+1)/6
4) 该程序最坏情况下的时间复杂度为( )。

A.O(n)
B.O(n^2)
C.O(nlogn)
D.O(n(logn)^2)
5) 当输入如下时,5 50 60 30 40 50,输出为( )。

A.660
B.760
C.770
D.720
6) 列各组输入获得的答案最大的是( )。
A.5 30 50 60 70 70
B.5 20 30 50 50 80
C.5 10 10 70 70 50
D.5 60 70 70 5 5
考点:
分析:
解答:
评论:
老师: