1021 Run Run Run!

來源:互聯網
上載者:User
 
描述

你知道嗎?北航不僅有ACM訓練隊,而且有ACM長跑隊。魔鬼的訓練,就從這裡開始……

每天晚上10點鐘他們都在體育場集合,排成一字。隨後,隊長Leo會勒令他們按照Fibonacci數列報數。順便說一句,Leo特別喜歡 Fibonacci數列,因此長跑隊成員每天跑的圈數都是Fibonacci數列中的某一項。Fibonacci數列第1項和第2項為1,從第3項開始每 一項都等於它之前兩項的和。

n 1 2 3 4 5 6 ……
Fn 1 1 2 3 5 8 ……

這天,Leo跑步無聊,要與DDR的rzc小朋友PK。他們約定比賽N天,這N天中跑的圈數是Fibonacci數列中從第K項開始的連續N項。圈數的順 序可以自行選擇,但是,leo不許rzc小朋友在任何一天和他跑同樣的圈數——一定要分個勝敗他才滿意。

現在需要你計算的是,Leo與rzc小朋友的長跑PK賽,到底有多少種可能的情況?

如範例中第2組資料:Leo和rzc將在2天內跑1圈和2圈,有兩種情況。

  player 1st day 2nd day
case 1: Leo 1 2
rzc 2 1
case 2: Leo 2 1
rzc 1 2
輸入

多組輸入資料。

每組資料只有一行,即兩個整數K和N,(1≤K<231, 0≤N≤8)。

輸入以-1 -1結束。

輸出

對每組資料輸出一行,為可能的情況數。

範例輸入1 0
2 2
3 3
-1 -1範例輸出1
2
12

解題思路:
這題徹底無語,如果通過程式來算多半是會逾時的,建議手工算一下,然後很變態的過掉。
因為N只從1-8,只要計算一下1-8的排列組合有多少種即可。

 

#include <stdio.h>main(){int a[9]={1,0,2,12,216,5280,190800,9344160,598066560};int b[9]={1,0,0,0,24,720,30240,1612800,109468800};     int n, k;scanf("%d %d",&n,&k);while(n != -1 || k != -1){if(n == 1)printf("%d\n",b[k]);elseprintf("%d\n",a[k]);scanf("%d %d",&n,&k);}}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.