• <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)論

            閱讀排行榜

            色婷婷综合久久久久中文一区二区| 久久w5ww成w人免费| 久久久久久亚洲精品无码| 久久国产精品免费一区二区三区| 久久综合五月丁香久久激情| 人妻少妇久久中文字幕 | 久久久久久噜噜精品免费直播| 人人狠狠综合88综合久久| 国内精品久久久人妻中文字幕| 国产精品gz久久久| 青青草原综合久久大伊人| 久久99精品国产一区二区三区| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 一本大道久久东京热无码AV| 漂亮人妻被中出中文字幕久久 | 久久久久AV综合网成人| 精品久久久久久久久久中文字幕 | 欧美性猛交xxxx免费看久久久| 亚洲第一极品精品无码久久| 久久性生大片免费观看性| 久久免费视频网站| 精品久久久久久中文字幕大豆网| 国产高潮国产高潮久久久91 | 久久久久九九精品影院| 国产精品久久久久AV福利动漫| 欧美日韩中文字幕久久久不卡| 国产精品久久久久久久| 亚洲国产精品成人久久| 国产亚洲精久久久久久无码77777| 999久久久免费国产精品播放| 97久久天天综合色天天综合色hd| 97精品国产97久久久久久免费 | 欧美一区二区三区久久综合| 亚洲乱码日产精品a级毛片久久 | 久久香蕉超碰97国产精品 | 久久综合狠狠综合久久97色| 久久久精品人妻无码专区不卡 | 久久婷婷是五月综合色狠狠| 欧美性猛交xxxx免费看久久久| 久久精品无码专区免费| 色综合久久久久综合99|