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

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

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

  從0~13中任取出7個數,然后判斷這7個數中是否存在連續的5個數, 規則如下:
1) 7個數可以是重復的數.
2) 0可以表示任意數
例子如下:
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

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


 

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

/*
從0~13中任取出7個數,然后判斷這7個數中是否存在連續的5個數, 規則如下:
1) 7個數可以是重復的數.
2) 0可以表示任意數
例子如下:
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:網友建議

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

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

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

posted on 2007-08-26 20:49 SmartPtr 閱讀(1122) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲国产欧美一区二区三区同亚洲| 亚洲一区二区三区影院| 久久国产精品一区二区| 亚洲小少妇裸体bbw| 一区二区成人精品 | 日韩亚洲欧美在线观看| 亚洲精品一区二区三区av| av成人天堂| 欧美一级视频免费在线观看| 久久精品成人| 亚洲高清不卡在线观看| 亚洲国产精选| 亚洲欧美欧美一区二区三区| 久久久午夜精品| 欧美日韩国产精品 | 亚洲网友自拍| 欧美在线网址| 亚洲三级性片| 欧美一区二区三区四区在线| 免费观看一区| 国产精品羞羞答答| 在线欧美小视频| 亚洲无线观看| 欧美激情91| 欧美一区二区视频在线观看2020| 欧美高清视频一二三区| 国产一区91精品张津瑜| 夜夜精品视频一区二区| 久久综合色婷婷| 一本色道久久| 欧美大片一区二区| 国产一区二区三区免费不卡| 在线亚洲欧美视频| 欧美国产一区二区三区激情无套| 亚洲视频欧美在线| 你懂的视频一区二区| 国产精品永久免费视频| 99视频精品在线| 欧美电影在线播放| 亚洲一二三四区| 亚洲色在线视频| 欧美国产激情| 久久精品综合| 国产日韩专区| 欧美一区二区精美| 一本色道久久加勒比精品| 免费h精品视频在线播放| 久久久精品tv| 亚洲欧美激情精品一区二区| 欧美www视频在线观看| 亚洲一区自拍| 欧美性色aⅴ视频一区日韩精品| 樱桃视频在线观看一区| 久久久国产午夜精品| 亚洲免费影视第一页| 国产精品yjizz| 亚洲夜间福利| 日韩一级片网址| 欧美日韩国产色综合一二三四 | 日韩一级在线观看| 欧美高清视频一区二区| 亚洲精品国精品久久99热一| 免费观看一区| 欧美成年人网站| 亚洲精选视频免费看| 欧美激情亚洲| 欧美精品一区二区三| 中文高清一区| 午夜在线播放视频欧美| 伊人成人开心激情综合网| 欧美国产日韩一二三区| 欧美人与性动交cc0o| 亚洲午夜av在线| 亚洲在线中文字幕| 一区二区在线不卡| 欧美国产精品专区| 欧美日韩久久不卡| 欧美一区二区私人影院日本| 久久久激情视频| 一本久久青青| 欧美亚洲专区| 亚洲精品一区二区三区樱花| 宅男噜噜噜66一区二区66| 国产日韩欧美高清免费| 免费欧美高清视频| 欧美日韩精品二区| 久久精品成人欧美大片古装| 久久夜色精品国产欧美乱| aa成人免费视频| 久久精品99无色码中文字幕| 亚洲精品一区二| 国产精品网站一区| 国产午夜精品美女视频明星a级 | 欧美国产91| 午夜欧美大尺度福利影院在线看| 久久电影一区| 亚洲视频在线观看网站| 欧美一区二区三区四区在线| 亚洲精品乱码久久久久| 亚洲一区中文| av成人老司机| 久久一区二区三区av| 午夜精品久久99蜜桃的功能介绍| 麻豆91精品| 久久久7777| 国产精品第一区| 亚洲国产综合91精品麻豆| 国产一区成人| 亚洲小说欧美另类婷婷| 亚洲美女在线一区| 久久综合久久综合九色| 午夜性色一区二区三区免费视频| 免费高清在线视频一区·| 欧美在线一二三四区| 欧美另类69精品久久久久9999| 久久人人爽爽爽人久久久| 欧美午夜视频一区二区| 欧美激情视频给我| 永久域名在线精品| 欧美亚洲综合在线| 久久成人免费| 国产精品日韩| 亚洲尤物在线| 欧美一区精品| 国产精品男女猛烈高潮激情 | 亚洲精品国产日韩| 亚洲国产精品女人久久久| 久久精品亚洲一区二区三区浴池| 午夜精品久久久久久久99黑人| 欧美日韩激情网| 日韩午夜在线| 亚洲私人影吧| 国产精品www| 亚洲欧美成人综合| 欧美在线免费观看| 国产午夜精品理论片a级大结局| 午夜精品国产| 久久亚洲综合色| 在线免费观看视频一区| 久久精品国产一区二区三区免费看| 久久米奇亚洲| 亚洲人成亚洲人成在线观看图片| 欧美aa国产视频| 亚洲精品国产视频| 亚洲综合三区| 国产一区二区三区四区三区四 | 亚洲国产日韩欧美在线99| 亚洲日本成人网| 欧美日韩中文在线| 亚洲天堂男人| 久久综合网色—综合色88| 91久久线看在观草草青青| 欧美日韩国产亚洲一区 | 久久精品国产99国产精品澳门| 久久精品亚洲一区二区| 国外精品视频| 欧美大成色www永久网站婷| 亚洲精品人人| 午夜在线视频一区二区区别| 国产亚洲欧美中文| 免费在线成人av| 在线一区亚洲| 欧美成人免费在线| 日韩亚洲一区二区| 国产精品无码专区在线观看| 久久人人爽人人| 这里只有精品丝袜| 狂野欧美激情性xxxx欧美| 日韩一级黄色av| 国产精品视频免费一区| 久久免费高清| 亚洲综合首页| 亚洲精选一区| 欧美69wwwcom| 久久精品夜夜夜夜久久| 亚洲色无码播放| 18成人免费观看视频| 欧美日韩精品免费| 亚洲私拍自拍| 亚洲国产第一页| 欧美在线高清视频| 亚洲久色影视| 一区二区三区在线观看视频| 欧美日韩国产影院| 久久另类ts人妖一区二区| 在线亚洲免费视频| 亚洲精品1234| 欧美国产日本高清在线| 久久国产精品电影| 亚洲一区二区免费看| 亚洲精品久久久久久一区二区| 国产日韩精品在线播放| 欧美日韩国产一区精品一区| 麻豆国产精品777777在线| 午夜精品一区二区三区在线视| 日韩亚洲在线| 99av国产精品欲麻豆| 亚洲成人在线视频播放| 牛夜精品久久久久久久99黑人| 久久精品国产99|