自己出的題自己難倒了,試著用數學的方法去假象解決。
先想到的是8個盒子隔空格放球。。。很像概率學吧!但是一點解決的辦法也沒有,算出來的只有多少種情況,而不知道具體情況。(學了概率,實際問題卻解決不出。。。)
因為疫情,我沒辦法去學??锤怕蕦W的書。然后自己想辦法,公式計算?。?!我將我家僅有的一張草稿紙寫完了,大概摸出個套路。
按照第一種思維,如下
按照商,得出個數,余數。每次將余數+每次要倍乘的數。。?;肆璩空?個小時得出來的結論。
而這個結論我始終覺得不好,覺得還有其他更通俗的方法。直到我要5點睡覺時,想到一個更好的方法。
每八個數一一對應10進制的數,然后再用數列的方式遞增,滿足它的個數為8個就好了!如果開始有重復的,就停止計算。
那總數S就直接是S=(k+1)*8,(k為間隔數),這樣剛好滿足8個數。
然后再數列遞增:(k+1)*n+1(加一:為滿足個數運算)。n的值為0~7。
再對每個數列的值進行求余,得出的每次放的格數。
這樣8個數的情況就出現了,很想寫一個遇到重復的就切掉數組后面的數。可是就只有8個,多寫的話會占內存。。。(放棄原則)
#include int main() { int S,k,z;//總數,間隔數,余數 int a[8]; scanf('%d',&k); z=k+1;//k+1將間隔數轉化為個數 S=8*z;//總數 for(int i=0;i<8;i++) { a[i]=(z*i+1)%8; printf('%d',a[i]); }return 0; } 但由于我這里用的是2進制,以0開頭,所以只改動一個地方就好 #include int main() { int S,k,z;//總數,間隔數,余數 int a[8]; scanf('%d',&k); z=k+1;//k+1將間隔數轉化為個數 S=8*z;//總數 for(int i=0;i<8;i++) { a[i]=(z*i)%8;//將+1去掉就好 printf('%d',a[i]); } return 0; } 如果要寫以其他數字的盒子隔空放球的話,將所有8的地方改成n,然后加上scanf('%d',&n); 如果要輸出不是以第一個開頭的情況,而是其他地方開頭,或所有的情況, 就在那個+1的地方換成+其他數值或者數組?沒嘗試過,可以試試。 感覺數學就是人類進步的階梯?。?! 太厲害了,不禁感慨數學的魅力。 當然,計算機也是,起碼不用手算,笑:)
上一篇:基于51單片機,3秒1亮的程序
下一篇:單片機的定時器
推薦閱讀最新更新時間:2025-06-07 23:40


- 熱門資源推薦
- 熱門放大器推薦
設計資源 培訓 開發板 精華推薦
- 步進電機控制指令詳解
- 依利浦實驗室人工智能平臺為Ceva NeuPro-Nano NPU優化 推動實現更智能的邊緣設備
- Bourns 全新推出兩款屏蔽功率電感器系列 專為 DDR5 電源管理電路開發
- Bourns 推出新型電流變壓器產品,采用坡莫合金 T 型磁芯結構,具備高匝數比特性
- 羅克韋爾自動化推出 OptixEdge 高級邊緣網關,助力客戶釋放數據潛力
- 通用汽車斥資 40 億美元,擬將主要制造業遷回美國
- 是德科技助力蔚來驗證新一代 汽車無線系統
- 為敏感的器件打造超低噪聲電源
- Teledyne Space Imaging 發布通過航天級篩選的工業圖像傳感器
- 曝韓國電池供應商LG與奇瑞簽署合作協議:訂單規模達8GWh!