#include <stdio.h>
#include <stdlib.h>
long long int f(int);
long long int g(int);
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
long long int i,j;
i=f(n);
j=g(n);
printf("%lld %lld\n",i,j);
}
return 0;
}
long long int f(int n)
{
if(n==1)
return 1;
else
return n*(n+1)/2;
}
long long int g(int n)
{
long long int arr[30000]={0};
int i;
if(n==1)
return 1;
else
{
for(i=0;i<n;i++)
arr[i]=f(i+1)+arr[i-1];
return arr[i-1];
}
}
long long int g(int n)
{
long long int arr[30000]={0};
int i;
if(n==1)
return 1;
else
{
for(i=0;i<n;i++)
arr[i]=f(i+1)+arr[i-1];
return arr[i-1];
}
}
粗體字有問題,迴圈從0開始,這行敘述會變
arr[0]=f(0+1)+arr[0-1];
arr[-1] 超過範圍了,而且在這個函式宣告的陣列只要離開函式就會釋放記憶體
這裡建議直接手算解出 g(n) 的一般式,既不用宣告陣列也不用跑迴圈
如果不會解可以看看這裡的討論