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

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

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

  從0~13中任取出7個數(shù),然后判斷這7個數(shù)中是否存在連續(xù)的5個數(shù), 規(guī)則如下:
1) 7個數(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

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


 

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

/*
從0~13中任取出7個數(shù),然后判斷這7個數(shù)中是否存在連續(xù)的5個數(shù), 規(guī)則如下:
1) 7個數(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個數(shù),那么建立一個int A[13],記錄哪些數(shù)有哪些數(shù)沒有(有的話置A[i]為1,否則是0),然后檢測A中連續(xù)的5個位置的情況就可以了

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

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

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

只有注冊用戶登錄后才能發(fā)表評論。
網(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网站| 欧美成人一区二免费视频软件| 欧美电影在线| 亚洲国产美女精品久久久久∴| 久久久综合免费视频| 久久午夜精品| 136国产福利精品导航| 久久久九九九九| 免费久久99精品国产自| 樱花yy私人影院亚洲| 久久夜色精品国产欧美乱| 欧美.com| 亚洲精品护士| 欧美日韩国内自拍| 99re热这里只有精品视频| 国产精品99久久99久久久二8| 欧美日韩久久精品| 一区二区免费在线播放| 亚洲欧美日韩一区二区| 国产欧美一区二区三区沐欲 | 亚洲欧美综合国产精品一区| 欧美天天影院| 亚洲欧美日韩国产一区| 久久久久久久999| 久久久国产亚洲精品| 老鸭窝亚洲一区二区三区| 亚洲国内高清视频| 欧美日本精品| 欧美一区在线看| 国产在线精品二区| 免费国产自线拍一欧美视频| 91久久精品www人人做人人爽| 亚洲少妇最新在线视频| 国产女优一区| 蜜桃av噜噜一区| 一本色道久久精品| 久久国产加勒比精品无码| 在线免费观看日韩欧美| 欧美经典一区二区三区| 中文在线资源观看网站视频免费不卡| 欧美综合国产精品久久丁香| 在线播放日韩欧美| 欧美日在线观看| 久久精品成人欧美大片古装| 91久久精品美女高潮| 亚洲欧美一区在线| 亚洲国产欧美国产综合一区| 国产精品福利在线观看网址| 久久国产成人| 99国产精品视频免费观看一公开| 久久国产精品久久国产精品| 亚洲国产毛片完整版| 国产老女人精品毛片久久| 久久综合久久综合久久| 亚洲视频在线观看网站| 男人的天堂亚洲| 香蕉久久精品日日躁夜夜躁| 亚洲日本成人在线观看| 国产欧美日韩一区| 欧美精品18+| 久久三级视频| 午夜精品福利视频| 日韩视频免费观看| 欧美电影在线播放| 久久亚洲美女| 欧美伊人久久| 亚洲一区二区三区在线看 | 伊人激情综合| 国产精品私拍pans大尺度在线| 蜜臀av在线播放一区二区三区| 亚洲一区二区综合| 亚洲看片免费| 亚洲大片在线观看| 久久亚洲视频| 欧美在线免费| 午夜精品影院| 亚洲欧美成人网| 中文精品一区二区三区| 亚洲黄色一区| 亚洲电影专区| 欲色影视综合吧| 狠狠色狠色综合曰曰| 国产日韩在线视频| 国产精品日本一区二区| 欧美视频在线不卡| 欧美日韩国产成人在线91| 欧美高清视频一区| 免费成人高清| 欧美 日韩 国产一区二区在线视频| 久久精品国产69国产精品亚洲| 亚洲欧美日韩综合aⅴ视频| 亚洲午夜激情网页| 亚洲一区二区三区高清| 亚洲一区二区高清| 亚洲一区尤物| 欧美专区一区二区三区| 久久看片网站| 久久综合伊人| 欧美成人国产一区二区| 亚洲国产精品成人一区二区 | 六十路精品视频| 美女成人午夜| 欧美精品二区| 欧美视频免费在线| 国产免费观看久久| 激情欧美一区| 亚洲精品免费观看| 亚洲一区二区三区激情| 亚洲你懂的在线视频| 欧美在线亚洲一区| 麻豆精品在线视频| 亚洲国产婷婷香蕉久久久久久99| 亚洲国产日韩欧美综合久久| 99av国产精品欲麻豆| 欧美在线视频免费播放| 两个人的视频www国产精品| 亚洲高清免费在线| 国产精品99久久久久久人| 欧美在线关看| 欧美多人爱爱视频网站| 国产精品美女视频网站| 韩国精品在线观看| 日韩视频在线你懂得| 午夜精品999| 另类综合日韩欧美亚洲| 一区二区三区高清在线| 羞羞视频在线观看欧美| 欧美18av| 在线一区二区日韩| 久久久久网址| 国产精品二区在线| 在线日韩欧美| 亚洲欧美日韩综合一区| 欧美成人中文| 亚洲在线中文字幕| 免费欧美电影| 久久av资源网| 欧美日韩精品欧美日韩精品| 国产中文一区二区| 一区二区日韩欧美| 美女主播视频一区| 亚洲综合精品四区| 欧美国产日韩精品| 激情综合久久| 欧美在线一二三区| 日韩亚洲视频| 免费在线观看一区二区| 国产美女一区二区| 欧美色一级片| 亚洲精品国产欧美| 美国成人毛片| 亚洲综合日韩| 欧美三级乱人伦电影| 亚洲国产精品www| 久久久久久久尹人综合网亚洲| 亚洲精选大片| 欧美大片18| 在线日韩中文字幕| 久久精品一区二区三区中文字幕 | 久久精品免费电影| 国产精品拍天天在线| 亚洲少妇在线| 亚洲精选中文字幕| 欧美成人官网二区| 在线日韩一区二区| 免费短视频成人日韩| 欧美一区二区三区四区在线观看| 亚洲午夜视频在线观看| 欧美日韩天天操| 一区二区三区**美女毛片| 欧美激情91| 免费久久久一本精品久久区| 在线观看日韩国产| 久久五月激情| 久久视频这里只有精品| 伊人成人在线视频| 欧美www视频在线观看| 久久久亚洲高清| 亚洲大片av| 欧美激情第3页| 亚洲三级国产| 欧美三级视频在线观看| 亚洲影院在线观看| 亚洲免费人成在线视频观看| 国产乱肥老妇国产一区二|