簡單數論
Fibonacci數列的每一項是之前兩項的和。
Fibonacci數列以1和2開始,前10項是
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
輸入一個n,求所有小于等于n,且為偶數的Fibonacci數之和。
input
輸入第一行組數T, 接下來T行,每行一個整數n。 (1 <= T <= 23) (1 <= N <= 4000000)
output
對于每組資料,輸出一個數,表示所有小于等于n,且為偶數的Fibonacci數之和。
Sample Input
3
10
100
4000000
Sample Output
10
44
4613732
我的提交樣例運行是對的,提交上去就報錯,找不出哪里錯了,求指點(下圖)

這一份是我在博客上看到的,為什么他的答案系統不會報錯啊(下圖)

uj5u.com熱心網友回復:
這里的條件不對,修改如下,供參考:while(t--){
scanf("%d",&n);
for(sum=0,i=0;i<4000 && num[i]<=n;i++)
{
if(num[i]%2==0) sum += num[i];
}
printf("%d",sum);
}uj5u.com熱心網友回復:
你看一下你的n支持多少?它的這個n支持4000000,你的支持40000,不滿足條件吧另外,你的測驗只是用要求里提示的,沒有考慮邊界測驗用例吧
uj5u.com熱心網友回復:
int和
long long int
是一回事嗎?
uj5u.com熱心網友回復:
%d和
%lld
是一回事嗎?
uj5u.com熱心網友回復:
題目的要求是成組輸入,成組輸出,修改如下,供參考:#include <stdio.h>
int main()
{
int n[23],t,num[4000],i=0,sum,j=0;
num[0]=1;num[1]=2;
for(i=2;i<4000;i++){
num[i] = num[i-1]+num[i-2];
}
scanf("%d",&t);
if(t<1 || t>23) t = 1;
while(t--){
scanf("%d",&n[j++]);
}
t=0;
while(j--){
for(sum=0,i=0;i<4000 && num[i]<=n[t];i++)
{
if(num[i]%2==0) sum += num[i];
}
printf("%d\n",sum);
t++;
}
return 0;
}
uj5u.com熱心網友回復:
4000000以下的Fibonacci數列只有32項,累加到int應該也不會溢位。疑似你的數列生成部分,溢位太多次了,引起系統不滿了?
uj5u.com熱心網友回復:
盡管沒有經驗,但是我一直聽說某些有性格的編譯器會捕捉有符號整數的溢位,進行一些有性格的處理,因為標準說那是未定義行為嘛。你寫代碼自己測驗的編譯器可能和我的編譯器一樣,無視這些溢位,畢竟是未定義行為嘛,無視也行。
uj5u.com熱心網友回復:
其實仔細研究下題目,沒這么復雜,int型也足夠了,修正#6樓的,如下,供參考:#include <stdio.h>
int main()
{
int n[23],t,i=0,a,b,sum,k;
scanf("%d",&t);
if(t<1 || t>23) t = 1;
while(t--){
scanf("%d",&n[i]);
if(n[i]<1 || n[i]>4000000)n[i]=1;
i++;
}
t=0;
while(i--){
a=0,b=1,sum=0,k=0;
while((k=(a+b)) <= n[t]){
if(k%2==0) sum += k;
a = b;
b = k;
}
printf("%d\n",sum);
t++;
}
//system("pause");
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/256030.html
標籤:C語言
上一篇:為什么成員函式用不了
下一篇:關于學習C語言中遇到的困惑。
