有这样一段程序,fun会对整数数组A进行求值,其中Floor表示向下取整:
fun(A)
sum = 0
for i = 1 to A.length
for j = i+1 to A.length
sum = sum + Floor((Ai
+Aj)/(Ai*Aj
))
return sum
给出数组A,由你来计算fun(A)的结果。例如:A = {1, 4, 1},fun(A) =
5/4
+
2/1
+
5/4
= 1 + 2 + 1 = 4。
第2 - N + 1行:每行1个数Ai(1 <= Ai
3 1 4 1
4
分析:Floor(A,B)=(A+B)/(A*B) 向下取整
#include<stdio.h>
#include<string.h>
using namespace std;
typedef long long ll;
int main(){
int n;
scanf("%d",&n);
int cnt1=0,cnt2=0;
for(int i=0;i<n;i++){
ll data;
scanf("%lld",&data);
if(data==1) cnt1+=n-1;
else if(data==2) cnt2++;
}
printf("%lld\n",cnt1+(cnt2-1)*cnt2/2);
return 0;
}