description
火車從始發站(稱為第1站)開出,在始發站上車的人數為a,然後到達第2站,在第2站有人上、下車,但上、下車的人數相同,因此在第2站開出時(即在到達第3站之前)車上的人數保持為a人。從第3站起(包括第3站)上、下車的人數有一定規律:上車的人數都是前兩站上車人數之和,而下車人數等於上一站上車人數,一直到終點站的前一站(第n-1站),都滿足此規律。
現給出的條件是:共有n個車站,始發站上車的人數為a,最後一站下車的人數是m(全部下車)。試問x站開出時車上的人數是多少?
若無解則輸出「no answer.」
input
包含多組測試資料,每組測試資料佔一行,包括a,n,m和x四個數,其中 0<=a,m<=10000 0output
每組測試資料佔一行,輸出乙個數x,即站開出時車上的人數。
測試資料
1 6 7 3
1 7 8 3
測試結果
2
no answer.
我第一次採用了暴力法,可是報錯time limit exceed,我想了一下在oj中,給定的time limit 是1000ms,出現time limit exceeded則說明這個程式的執行時間超過了這個限度。於是我找出我的錯誤原因:
沒有迴圈終止條件,當測試條件是輸入1 6 7 3 時 結果顯而易見的是輸出x站上車的人數是2,但是當輸入條件是 1 6 8 3 的時候 ***這個程式就在迴圈中跑不出去了。
我用數學方法分析了一下,這個時候,按我們數學方法來求解的話,這個時候的x是可以求出來的,但是求出來的是乙個小數,因此他死死都滿足不了跳出條件了,畢竟這裡跳出條件bus[n-1]==n n是乙個int型別的資料。 因此這個求出來的小數斷然不會滿足。
">#include#include#include#include#include#include#include#include"stdio.h"
using namespace std;
int main()
我改進一下,用了另外的方法,即數學推算。
#includeint main()
for(i=3;i<=n-1;i++)
for(i=3;i<=n-1;i++)
x1=(m-s[n-1]*a)*1.0/sa[n-1];
//printf("x1;%.2lf\n",x1);
//printf("x1(int ) %d\n",(int )x1);
if(x1>=0&&(x1 - (int)x1)==0)
printf("%d\n",a*s[x]+(int)x1*sa[x]);
else
printf("no answer.\n");
}return 0;
}
這樣求出第二站上車人數x1(**中是x1),任何一站的上車人數和總人數都能求出,而且判定這個x1的條件不僅是大於等於0還有乙個是要是整數,這裡我用了x1 - (int)x1)==0判定是否為整數,就是不知道還有什麼其他簡便的方法了。然後提交,accept。 8759 火車上的人數
火車從始發站 稱為第1站 開出,在始發站上車的人數為a,然後到達第2站,在第2站有人上 下車,但上 下車的人數相同,因此在第2站開出時 即在到達第3站之前 車上的人數保持為a人。從第3站起 包括第3站 上 下車的人數有一定規律 上車的人數都是上兩站上車人數之和,而下車人數等於上一站上車人數,一直到終...
8759 火車上的人數
描述 火車從始發站 稱為第1站 開出,在始發站上車的人數為a,然後到達第2站,在第2站有人上 下車,但上 下車的人數相同,因此在第2站開出時 即在到達第3站之前 車上的人數保持為a人。從第3站起 包括第3站 上 下車的人數有一定規律 上車的人數都是上兩站上車人數之和,而下車人數等於上一站上車人數,一...
火車上的交談
前幾日坐火車回來,對面坐了個哥們,他看起來很疲勞,光光的臉像個小孩一樣,後來和他交流起來,現在心情平復,想起來,受益真的很大 其一 正視自己 與很多人聊天後,覺得自己做這一行真的很不錯,又賺錢,又能夠認識到很多很多優秀的人,就像他說的可能表現得過於自信了,這句話剛開始我還不認同,但是今天閱讀了一篇新...