• <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>
            這是《算法設(shè)計(jì)與分析》教材上的一道題,我們老師布置的第一道題。說的是統(tǒng)計(jì)出一本給定頁(yè)碼書中從0~9各個(gè)數(shù)字出現(xiàn)的次數(shù),頁(yè)碼最高不差過10e9。
            窮舉法是很容易想到的,不過當(dāng)輸入過大時(shí)很耗時(shí)間。因此應(yīng)該總結(jié)規(guī)律。
            #include<stdio.h>
            #include
            <string.h>
            #include
            <stdlib.h>
            #include
            <math.h>
            #define LEN 20
            int bs[] = {0120300400050000600000700000080000000900000000};
            int BS = 1111111111;
            void StrtoNum(char *str, int *num)
            {
                
            int i, len;
                len 
            = strlen(str);
                
            *num = 0;
                
            for(i = 0; i < len; i++)
                    
            *num = *num * 10 + str[i] - '0';
            }

            int Pow(int a, int b)
            {
                
            int i, t;
                t 
            = a;
                
            for(i = 0; i < b - 1; i++)
                    t 
            *=a;
                
            return t;
            }

            int GetMod(int a)
            {
                
            return BS % Pow(10, a);
            }

            int main()
            {
                
            int i, j;
                
            int nb;// now bit
                char nums[LEN];
                
            int num;
                
            int rs[10];// result 
                int len;
                
            int mh;//most high 
                int nt;
                
            while(gets(nums) != NULL)
                
            {
                    memset(rs, 
            0sizeof(rs));
                    len 
            = strlen(nums);
                    StrtoNum(nums, 
            &num);
                    
            //
                    
            //printf("num = %d\n", num);
                    
            //
                    mh = nums[len - 1- '0';
                    
            for(i = 0; i <= mh; i++)//init the lowest bit
                        rs[i] = 1;
                    
            for( i = 1; i < len; i++)
                    
            {
                        nb 
            = len - i -1;
                        mh 
            = nums[nb] - '0';
                        StrtoNum(
            &nums[nb + 1], &nt);
                        
            //
                        
            //printf("mh = %d nt = %d\n", mh, nt);
                        
            //
                        rs[mh] += nt + 1;//@2, mh mh
                        for(j = 0; j < mh; j++)//@2 others
                        {
                            rs[j] 
            += Pow(10, i); 
                        }

                        
            for(j = 0; j < 10; j++)//@1
                        {
                            rs[j] 
            += mh * bs[i];
                        }
                        
                    }

                    rs[
            0-= GetMod(len);
                    
            for(i = 0; i < 10; i++)
                        printf(
            "%d %d\n", i, rs[i]);
                }

                
            //getchar();
            }

            統(tǒng)計(jì)出只有一位數(shù)的情況是很簡(jiǎn)單的,我們來當(dāng)在統(tǒng)計(jì)好的一個(gè)數(shù)字前面再加上位數(shù)時(shí)統(tǒng)計(jì)結(jié)果會(huì)怎么增加。我們可以把這個(gè)增加的值看做兩部分,一部分是因高位增加導(dǎo)致地位數(shù)的取值范圍增大而導(dǎo)出的,另一部分是高位本身產(chǎn)生的。兩方面的計(jì)算都有規(guī)律可循。要特別注意0的計(jì)算。
            請(qǐng)注意庫(kù)函數(shù)pow()的返回值為double,轉(zhuǎn)換為int時(shí)會(huì)有精度丟失(調(diào)試中的表現(xiàn)為無論數(shù)據(jù)多大,結(jié)果總跟標(biāo)準(zhǔn)答案相差1),因此這里特地寫了一個(gè)Pow()函數(shù)做返回值為int的乘方計(jì)算。
            posted on 2012-03-08 19:38 小鼠標(biāo) 閱讀(1098) 評(píng)論(0)  編輯 收藏 引用

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


            <2012年8月>
            2930311234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            常用鏈接

            隨筆分類(111)

            隨筆檔案(127)

            friends

            最新評(píng)論

            閱讀排行榜

            青青青国产成人久久111网站| 久久久久久久精品成人热色戒| 久久99国产综合精品女同| 狠狠干狠狠久久| 99久久综合国产精品免费| 99久久精品国产免看国产一区| 国内精品久久久久久久涩爱| 一本久久精品一区二区| 久久国产乱子伦免费精品| 精品久久久久中文字幕一区| 久久精品免费全国观看国产| 久久精品国产69国产精品亚洲| 亚洲国产精品无码久久久久久曰| 久久婷婷五月综合97色一本一本 | 性欧美大战久久久久久久| 日日躁夜夜躁狠狠久久AV| 久久精品18| 久久综合久久综合久久综合| 久久九九久精品国产免费直播| 欧美激情精品久久久久| 国产成人久久AV免费| 久久人人爽人人人人爽AV| 色婷婷久久久SWAG精品| 精品久久久久久无码国产| 99久久精品国内| 亚洲午夜久久久久久久久久| 合区精品久久久中文字幕一区 | 中文字幕乱码人妻无码久久 | 国产激情久久久久久熟女老人| 久久播电影网| 久久精品免费网站网| 久久亚洲高清观看| 久久久久综合网久久| 国产亚洲美女精品久久久久狼| 人妻无码αv中文字幕久久琪琪布| 久久久久久久91精品免费观看| 欧美精品福利视频一区二区三区久久久精品 | 亚洲AV无码久久精品色欲| 久久精品国产99国产精品导航| 一本大道久久香蕉成人网| 久久中文字幕人妻丝袜|