#16209: 一直NA,到底哪裡錯?


wendy93926 (星空)

學校 : 新北市立中山國中
編號 : 80778
來源 : [111.248.156.249]
最後登入時間 :
2022-07-03 19:14:02
a216. 數數愛明明 | From: [36.224.2.108] | 發表日期 : 2018-12-06 20:22

#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];
}
}

 
#16210: Re:一直NA,到底哪裡錯?


freedom501999@gmail.com (帥氣魔方生)

學校 : 不指定學校
編號 : 88611
來源 : [39.8.203.54]
最後登入時間 :
2019-05-30 22:56:25
a216. 數數愛明明 | From: [27.52.77.116] | 發表日期 : 2018-12-06 21:20

 

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) 的一般式,既不用宣告陣列也不用跑迴圈

如果不會解可以看看這裡的討論

 
ZeroJudge Forum