青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

SmartPtr
本博客已搬至:http://www.cnblogs.com/baiyanhuang/
posts - 29,comments - 176,trackbacks - 0

By SmartPtr(http://m.shnenglu.com/SmartPtr/)

  從0~13中任取出7個(gè)數(shù),然后判斷這7個(gè)數(shù)中是否存在連續(xù)的5個(gè)數(shù), 規(guī)則如下:
1) 7個(gè)數(shù)可以是重復(fù)的數(shù).
2) 0可以表示任意數(shù)
例子如下:
0, 1, 4, 3, 8, 0, 13--->true: 1-2-3-4-5
0, 1, 1, 1, 9, 10, 0--->false
0, 1, 3, 9, 10, 11, 12->true: 9-10-11-12-13
0, 0, 0, 0, 0, 0, 0->true: 0-1-2-3-4

這是最近看到的一個(gè)算法題, 粗粗一看,覺得很簡單, 可是慢慢往里面想,覺得要考慮的還是挺多的。現(xiàn)在把它實(shí)現(xiàn)出來放在這里,當(dāng)然,加了幾個(gè)參數(shù)使其更加通用。希望對(duì)大家有些參考價(jià)值。寫的不明白的地方,有錯(cuò)誤的地方大家可以指出來;大家如果有好的思路的話也希望能寫下來共享一下。以下是代碼與注釋:


 

#include <stdio.h>
#include 
<iostream>
using namespace std;

/*
從0~13中任取出7個(gè)數(shù),然后判斷這7個(gè)數(shù)中是否存在連續(xù)的5個(gè)數(shù), 規(guī)則如下:
1) 7個(gè)數(shù)可以是重復(fù)的數(shù).
2) 0可以表示任意數(shù)
例子如下:
0, 1, 4, 3, 8, 0, 13--->true: 1-2-3-4-5
0, 1, 1, 1, 9, 10, 0--->false
0, 1, 3, 9, 10, 11, 12->true: 9-10-11-12-13 
0, 0, 0, 0, 0, 0, 0->true: 0-1-2-3-4
*/


// Helper functions
void outputarray(int a[], int n)
{
    
for(int i = 0; i < n; ++i) cout<<a[i]<<" ";
    cout
<<endl;
}

void outputresult(int nstart, int m)
{
    cout
<<"Continuous Array:";
    
while(m--)    cout<<nstart++<<" ";
    cout
<<endl;
}

// Return if the n elements array contains m continuous numbers, the elements must large than 0
// this is a common implementation
bool Is_n_Contains_m_ContinuousNum(int a[], int n, int m) 
{
    
// step 1: get num of 0
    int nZeroNum = 0;
    
for(int i = 0; i < n; ++i)
        
if(0 == a[i]) ++nZeroNum;

    cout
<<"Original Array:  "; outputarray(a, n);

    
// step 2: if we have enough 0, get continuous num is easy.
    if(nZeroNum >= m-1)
    {
        
int min = a[0];
        
for(int i = 1; i < n; ++i)
            
if(a[i] < min || 0 == min) min = a[i];
        outputresult(min, m);
        
return true;
    }
    
// not enough zero, we need to refine the judgement
    else
    {
        
// step 2.1: sort the array. (bubble sort, ascending)
        bool bIsDone = false;
        
for(int i = n-1; i >= 0 && !bIsDone; --i)
        {
            bIsDone 
= true;
            
for(int j = 0; j < i; ++j)
            {
                
if(a[j+1< a[j])
                {
                    bIsDone 
= false;
                    
int tmp = a[j+1];
                    a[j
+1= a[j];
                    a[j] 
= tmp;
                }
            }
        }

        cout
<<"Sorted Array:    "; outputarray(a, n);

        
// step 2.2: remove redundant num except 0
        int aa[256];
        aa[
0= a[0];
        
int j = 1;
        
for(int i = 0; i < n-1++i)
        {
            
if(a[i+1!= a[i] || 0 == a[i+1])
                aa[j
++= a[i+1];
        }
        memcpy(a, aa, j 
* sizeof(aa[0]));
        n 
= j;
        
if(n < m) return false;

        cout
<<"Unique Array:    "; outputarray(a, n);


        
// step 2.3: get index of first non-zero element
        int nIndex = 0;
        
for(int i = 0; i < n; ++i)
        {
            
if(a[i] != 0
            {
                nIndex 
= i;
                
break;
            }
        }

        
// step 2.4: refined judgement
        
// if n = 7; m = 5; nZeroNum = 2;
        
// if we can get continious number without zero or only with 1 zero, then with 2 zero is ok too.
        
// so if we got x zeros, we need to check if can success with (0 ~ x-1) zeros
        for(int k = 0; k <= nZeroNum; ++k)
        {
            
int nInterval = m - k - 1;
            
for(int i = nIndex; i < n-nInterval; ++i)
            {
                
// when k = nZeroNum = 2;
                
// if the a[i+nInterval] - a[i] ranged in (nInterval, m-1), then it is continuous)
                
// means a[i+2] - a[i] ranged in (2, 4), for example:
                
// 1 3 5;  1 2 3; 1 2 4;
                if(a[i+nInterval] - a[i] <= m-1 && a[i+nInterval] - a[i] >= nInterval)
                {
                    outputresult(a[i], m);
                    
return true;
                }
            }
        }
    }

    
return false;
}


int main(int argc, char *argv[])
{
    
int a[] = {0000000};
    
if(!Is_n_Contains_m_ContinuousNum(a, sizeof(a)/sizeof(a[0]),5))
        cout
<<"Continuous Array:Not Found ";
    
return 0;

 



PS:網(wǎng)友建議

fflush:不需要這么復(fù)雜吧,題目說明了是從0~13中任取出7個(gè)數(shù),那么建立一個(gè)int A[13],記錄哪些數(shù)有哪些數(shù)沒有(有的話置A[i]為1,否則是0),然后檢測A中連續(xù)的5個(gè)位置的情況就可以了

SmartPtr:fflush的思路對(duì)我很有啟發(fā), 但我們還要考慮多個(gè)0的情況, 按著這個(gè)思路的話我覺得可以這么做:針對(duì)0~13建立一個(gè)數(shù)組A[14], A[0], A[1]...分別對(duì)應(yīng)0, 1...的個(gè)數(shù)。然后依次檢測A中連續(xù)的5個(gè)位置, 如果其0的個(gè)數(shù)小于A[0],那么就存在連續(xù)的數(shù)。(當(dāng)然還有一些邊緣情況要處理)。

這個(gè)算法我覺得十分有效, 通過引入一個(gè)數(shù)組大大的簡化了問題。但是有個(gè)缺點(diǎn)就是如果要判斷任意范圍內(nèi)的5個(gè)連續(xù)數(shù)就不容易了。如:
0, 1, 122, 678, 10000, 3, 6

posted on 2007-08-26 20:49 SmartPtr 閱讀(1122) 評(píng)論(0)  編輯 收藏 引用

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


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品久久久久久超碰 | 欧美三级午夜理伦三级中视频| 亚洲制服少妇| 亚洲欧美日韩国产综合在线 | 99国产精品| 一区二区欧美在线| 亚洲午夜久久久久久久久电影院 | 欧美日韩视频在线第一区| 欧美日本不卡视频| 国产精品福利网站| 国产亚洲欧美一级| 亚洲人成人一区二区在线观看| 亚洲欧洲午夜| 午夜国产精品视频| 另类av一区二区| 亚洲人成人77777线观看| 亚洲黄色在线观看| 一区二区三区欧美成人| 欧美亚洲自偷自偷| 欧美xart系列高清| 国产精品高潮在线| 伊人激情综合| 亚洲一区三区在线观看| 久久夜色精品一区| 999亚洲国产精| 久久精品国产第一区二区三区最新章节| 久久精品盗摄| 欧美香蕉大胸在线视频观看| 激情欧美一区二区三区| 国产精品久久久久久久久久妞妞| 免费不卡视频| 国产乱码精品一区二区三区五月婷 | 亚洲国产成人久久综合| 亚洲午夜一区二区三区| 老色批av在线精品| 亚洲一区二区在| 欧美久久在线| 亚洲国内高清视频| 久久久亚洲国产美女国产盗摄| 日韩午夜在线电影| 毛片av中文字幕一区二区| 国产日韩精品一区二区三区| 蜜桃久久精品一区二区| 国产精品久久福利| 亚洲成色精品| 午夜精品一区二区三区在线播放| 久久久久久亚洲精品不卡4k岛国| 亚洲精品九九| 免费久久99精品国产| 国产在线欧美日韩| 亚洲免费一级电影| 99热精品在线| 欧美精品免费看| 亚洲国产小视频| 欧美mv日韩mv亚洲| 久久久久久999| 国内揄拍国内精品久久| 久久爱www.| 欧美一区在线直播| 国模精品娜娜一二三区| 久久久久国内| 久久本道综合色狠狠五月| 国产女主播一区二区三区| 一区二区三欧美| 亚洲毛片在线免费观看| 欧美日韩成人网| 久久综合狠狠综合久久激情| 亚洲性av在线| 亚洲精品免费一二三区| 麻豆91精品| 日韩视频在线播放| 亚洲精品三级| 欧美日韩中文在线| 午夜精品久久久久久久99热浪潮 | 蜜臀99久久精品久久久久久软件| 伊人久久大香线| 欧美高清视频| 欧美日韩另类字幕中文| 一本不卡影院| 亚洲视频中文| 国产一区99| 欧美成人首页| 欧美视频中文字幕在线| 久久国产视频网| 久久激情综合网| 亚洲精品美女91| 亚洲视频综合| 在线不卡免费欧美| 亚洲开发第一视频在线播放| 国产精品免费区二区三区观看| 久久riav二区三区| 欧美大尺度在线| 亚洲欧美日韩在线不卡| 久久久99精品免费观看不卡| 亚洲人成啪啪网站| 亚洲欧美日韩系列| 亚洲黄色一区二区三区| av不卡在线看| 亚洲春色另类小说| 亚洲一区精品电影| 亚洲人体影院| 欧美在线亚洲| 亚洲午夜激情| 久久亚洲色图| 久久久777| 欧美日韩在线视频首页| 久久久久久噜噜噜久久久精品| 欧美岛国激情| 久久综合久久综合九色| 国产精品黄页免费高清在线观看| 能在线观看的日韩av| 国产精品久久久久久模特| 欧美激情精品久久久| 国产女优一区| 亚洲一区二区三区欧美| 日韩性生活视频| 久久久久久久久久久久久9999| 亚洲伊人久久综合| 欧美国产专区| 欧美国产日韩精品| 国产主播精品在线| 亚洲欧美精品suv| 中文一区二区| 欧美女人交a| 亚洲国产小视频在线观看| 精品不卡视频| 久久久久国产一区二区三区| 欧美一级视频精品观看| 性色一区二区| 亚洲一区免费观看| 亚洲视频免费| 欧美成人精品一区二区三区| 久久亚洲精品网站| 国产丝袜一区二区| 亚洲在线电影| 欧美中文字幕久久| 国产日韩欧美一区二区三区在线观看 | 亚洲一区二区精品视频| 欧美人与性禽动交情品| 亚洲激情专区| 99成人在线| 欧美日韩亚洲一区二区三区在线| 亚洲国产成人av| 亚洲欧洲三级电影| 欧美电影免费网站| 91久久综合亚洲鲁鲁五月天| 亚洲精品久久久久久久久久久久久 | 国内精品久久久久久影视8| 午夜亚洲视频| 久久免费视频在线观看| 黄色成人免费观看| 美女视频黄免费的久久| 最新国产成人av网站网址麻豆| 99热这里只有精品8| 欧美日韩在线一区二区三区| 亚洲一区二区三区高清| 久久精品盗摄| 91久久国产精品91久久性色| 欧美激情网友自拍| 亚洲天堂成人在线视频| 久久久99免费视频| 亚洲日本黄色| 国产精品视频内| 久久嫩草精品久久久精品一| 欧美激情女人20p| 亚洲视频狠狠| 韩日精品视频一区| 欧美猛交免费看| 性伦欧美刺激片在线观看| 欧美福利视频网站| 亚洲影音一区| 亚洲第一区在线| 国产精品成人av性教育| 久久精品国产综合精品| 亚洲三级毛片| 久久偷窥视频| 中日韩美女免费视频网址在线观看 | 久久久精品欧美丰满| 亚洲三级免费电影| 久久综合久久久| 亚洲欧美日韩国产中文| ●精品国产综合乱码久久久久| 欧美日韩国产色视频| 久久国产精品久久国产精品| 亚洲精品国产视频| 久久综合久久美利坚合众国| 一区二区三区精品在线| 国内外成人在线视频| 欧美三级第一页| 另类专区欧美制服同性| 亚洲一区二区三区四区五区黄| 亚洲日本免费| 亚洲第一区在线观看| 欧美精品一区在线播放| 亚洲视频在线一区| 裸体一区二区三区| 亚洲一区区二区| 日韩午夜在线电影| 在线播放日韩欧美| 国产女同一区二区|