日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

蓝桥杯B组 杨辉三角

發(fā)布時(shí)間:2023/12/18 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯B组 杨辉三角 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目分析

這道題得斜著看,可以發(fā)現(xiàn)如下規(guī)律:

1.題目要求的是N第一次出現(xiàn)的數(shù)字,那么左邊的優(yōu)先于右邊的,所以可以只看一半。

2.搜索順序:在下的斜行優(yōu)于在上的斜行

3.C(16,32)< 10^9 < C(17,34) ,故我們搜索的斜行枚舉到16即可,通過 C(k , 2k)在計(jì)算機(jī)上試一下即可知道。

4.通過一個(gè)循環(huán)來(lái)枚舉每一斜行,每個(gè)斜行用二分法來(lái)檢索N

5.還需要一個(gè)方法來(lái)求C( n , k ),這個(gè)直接求解即可,先分子除以分母,在乘到總數(shù)里

6.輸出:通過觀察可發(fā)現(xiàn)在 C(n,k) 這?之前有n行,既有(1+n)*n / 2 個(gè)數(shù),該數(shù)在該行的第 K+1 個(gè),即該數(shù)第一次出現(xiàn)是在 (1+n)*n / 2 + K + 1 個(gè)數(shù)。

import java.util.*; class Main{static int n;static long c(long a,long b) {long res=1;for(long i=a,j=1;j<=b;j++,i--) {res=res*i/j;//先除在乘起來(lái),不然會(huì)爆//該方法用在了check中,為了比較c(mid,k)與n的大小,一旦大于n結(jié)果自然知曉,也無(wú)需在往下計(jì)算 if(res>n) return res;}//System.out.println("c: "+res);return res;}static boolean check(int k) {//System.out.println("k1: "+k);long l=2*k,r=n;long res=0;while(l<=r) {//System.out.println("k2: "+k);long mid=l+r>>1;res=c(mid,k); if(res>n) r=mid-1;else if(res<n) l=mid+1;else {//if(n<2*k) return false;//n要大于2KSystem.out.println((mid+1)*mid/2+k+1);return true;}}return false;}public static void main(String args[]) {Scanner scan=new Scanner(System.in);n=scan.nextInt();for(int k=16;k>=0;k--) {if(check(k))break;}} }

反思

1.要注重臨界值的判斷,例如此處的 l <= r,當(dāng) n 就是該斜行中的最大值時(shí),最終 l=mid=r,所以循環(huán)條件應(yīng)該是 l <= r。若為 l < r,那么當(dāng) l = r 時(shí)就退出循環(huán)導(dǎo)致查找失敗。?

2.當(dāng) n < 2k 時(shí),n一定小于 C(k,2k) ,則沒必要進(jìn)行該斜行的檢索,也不會(huì)進(jìn)入循環(huán),也達(dá)到了一個(gè)篩選的作用。

總結(jié)

以上是生活随笔為你收集整理的蓝桥杯B组 杨辉三角的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。