• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ZOJ 2060 Fibonacci Again

            Posted on 2010-09-28 11:57 李東亮 閱讀(627) 評論(0)  編輯 收藏 引用

            Fibonacci Again

            【題目描述】

            There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) + F(n-2) (n>=2)
            Input
            Input consists of a sequence of lines, each containing an integer n. (n < 1,000,000)
            Output
            Print the word "yes" if 3 divide evenly into F(n).
            Print the word "no" if not.
            Sample Input
            0
            1
            2
            3
            4
            5
            Sample Output
            no
            no
            yes
            no
            no
            no

            這道題應(yīng)該說是很簡單的題,如果說考察了什么知識點的話時能說是(a+b%n = (a%n + b%n)%n,但是這個題卻有多種思路,可以從很多方面優(yōu)化,比較有意思。

            【解題思路1】:

            最簡單的思路,開一個大小為n的數(shù)組,初始化為0,遍歷一遍,如果某一項滿足條件則設(shè)置為1,就不多說了,代碼如下:

            #include <stdio.h>
            #include 
            <stdlib.h>

            int r[1000000];
            int main(void)
            {
                
            int a, b, tmp;
                
            int i;
                
            int n;
                a 
            = 7;
                b 
            = 11;
                r[
            0= r[1= 0;
                
            for (i = 2; i < 1000000++i)
                {
                    tmp 
            = ((a%3+ (b%3)) % 3;
                    
            if (tmp == 0)
                        r[i] 
            = 1;
                    a 
            = b;
                    b 
            = tmp;
                }
                
            while (scanf("%d"&n) == 1)    
                {
                    
            if (r[n] == 0)
                        printf(
            "no\n");
                    
            else
                        printf(
            "yes\n");
                }
                
            return 0;
            }

            這個提交上去,由于執(zhí)行時只查表,時間不算多10ms,但是內(nèi)存消耗不小。下面看幾種優(yōu)化的方法。

            【思路2

            這種題一般情況下會有規(guī)律。把前幾個能被3整除的數(shù)的下標(biāo)列出來一看,規(guī)律就出現(xiàn)了:2 6 10 14…,這就是一個等差數(shù)列嘛,這就好辦了,an = a1 + (n-1)*4,那么an-a1肯定能被4整除。代碼如下:

            #include <stdio.h>
            #include 
            <stdlib.h>

            int main(void)
            {
                
            int n;
                
            while (scanf("%d"&n) == 1)    
                {
                    
            if ((n-2)%4 == 0)
                        printf(
            "yes\n");
                    
            else
                        printf(
            "no\n");
                }
                
            return 0;
            }

            該解法如果說還可以優(yōu)化的話,那只能把取余運算變?yōu)槲贿\算了。

            if ((n-2)&3)

                                 printf("no\n");

                          else

                                 printf("yes\n");

            【思路3

            如果把數(shù)列前幾項的值列出來,會發(fā)現(xiàn)數(shù)組中每8項構(gòu)成一個循環(huán)。這也很好辦。

            代碼如下:

            #include <stdio.h>
            #include 
            <stdlib.h>

            int a[8];
            int main(void)
            {
                
            int n;
                a[
            2= a[6= 1;
                
            while (scanf("%d"&n) == 1)
                    printf(
            "%s\n", a[n%8== 0 ? "no" : "yes" );
                
            return 0;
            }

            其實這個還可以優(yōu)化,我們仔細(xì)觀察可以看到這些滿足條件的下標(biāo)有一個特點:

            N%8 == 2或者n%8==6

            代碼如下:

            #include <stdio.h>
            #include 
            <stdlib.h>

            int main(void)
            {
                
            int n;
                
            while (scanf("%d"&n) == 1)
                {
                    
            if (n%8 == 2 || n%8 == 6)
                        printf(
            "yes\n");
                    
            else
                        printf(
            "no\n");
                }
                
            return 0;
            }

             

             


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            posts - 12, comments - 1, trackbacks - 0, articles - 1

            Copyright © 李東亮

            97精品国产97久久久久久免费| 亚洲中文字幕伊人久久无码| 亚洲综合精品香蕉久久网97| 久久久久国产精品嫩草影院 | 国产午夜精品久久久久免费视| 久久精品人人槡人妻人人玩AV | 久久国产美女免费观看精品| 久久无码AV中文出轨人妻| 久久精品毛片免费观看| 久久涩综合| 久久精品一区二区| 精品国产乱码久久久久久人妻| 亚洲狠狠综合久久| 久久夜色精品国产噜噜亚洲AV | 偷偷做久久久久网站| 国内精品久久久久久野外| 欧美亚洲国产精品久久| 色综合久久中文色婷婷| 亚洲综合熟女久久久30p| 久久久久久无码国产精品中文字幕| 久久久久人妻一区精品性色av| 久久久精品人妻无码专区不卡| 久久精品国内一区二区三区| 99久久国产精品免费一区二区| 污污内射久久一区二区欧美日韩| 久久精品国产秦先生| 99精品国产在热久久无毒不卡| 亚洲午夜久久久久久久久久| 亚洲人成网站999久久久综合 | 久久国产三级无码一区二区| 91精品日韩人妻无码久久不卡| 久久亚洲精品中文字幕| 少妇精品久久久一区二区三区| 亚洲人成精品久久久久| 一本久久a久久精品亚洲| 国内精品九九久久精品| 精品无码久久久久国产动漫3d| 国产精品久久久久a影院| 久久91精品国产91久| 亚洲∧v久久久无码精品| 久久精品毛片免费观看|