小弟已經搞了好久 第一個範例資料跟第二個都沒問題 到第三個-21的時候 他就怎樣都不跑!!><
求助高手!!謝謝
#include<stdio.h>
#include<stdlib.h>
int h(int);
int g(int);
int f(int);
int main(void)
{ long long int n, k;
while(scanf("%lld",&n)!=EOF)
{
printf("%lld",f(n));
}
return 0;
}
int f(int x)
{ if (x>h(x)) return f(x-1)-h(x);
else if(x<h(x)) return f(g(x))-g(x);
else return 1;
}
int h(int y)
{ if(y<2) return (-1);
else return (2+h(y-1)-h(y-2));
}
int g(int z)
{ if(z<=2) return (z*z-1);
else return 2;
}
小弟已經搞了好久 第一個範例資料跟第二個都沒問題 到第三個-21的時候 他就怎樣都不跑!!><
求助高手!!謝謝
#include
#include
int h(int);
int g(int);
int f(int);
int main(void)
{ long long int n, k;
while(scanf("%lld",&n)!=EOF)
{
printf("%lld",f(n));
}
return 0;
}
int f(int x)
{ if (x>h(x)) return f(x-1)-h(x);
else if(x
else return 1;
}
int h(int y)
{ if(y<2) return (-1);
else return (2+h(y-1)-h(y-2));
}
int g(int z)
{ if(z<=2) return (z*z-1);
else return 2;
}
建議以dp建表
題目雖說-300<x<300
但運算下來會-300<x<90000
所以陣列要建9萬多(宣告於全域 以免堆疊溢滿)
輸入前 先用for將f(x)以-10 -20 -30 ... -290代入建表
以免跑h(x)時overflow
隨後即可AC