Post by huangno1 on Feb 26, 2017 20:52:55 GMT -8
程式說明
西賈市的市民最近常常抱怨路面不平,於是市長打算派人整修道路。然而經費有限,只足夠修補一單位長度的道路。市長希望你幫他計算,如何修補道路,可以讓修補後連續平整的道路長度最長。底下我們以一連串的數字代表道路狀況,1 表示平整道路,0 表示坑洞。
1 1 0 0 1 0 1 0 1 1
若將上述道路狀況儲存於一維整數陣列:
如果修補位置 [2],修補後的連續平整道路長度最長為 3([0]-[2])。
如果修補位置 [3],修補後的連續平整道路長度最長為 2([0]-[1]、[3]-[4]、[8][-[9])。
如果修補位置 [5],修補後的連續平整道路長度最長為 3([4]-[6])。
如果修補位置 [7],修補後的連續平整道路長度最長為 4([6]-[9])。
西賈市的道路最長只有20單位,市長會輸入一條道路的情況(第一行為道路長度,第二行為道路狀況),保證至少有一個坑洞。你的程式需輸出修補後連續平整道路的最長長度。
【範例輸入1】
10
1 1 0 0 1 0 1 0 1 1
【範例輸出1】
We will have a 4-unit flat road.
【範例輸入2】
9
1 0 1 0 1 1 1 1 1
【範例輸出2】
We will have a 7-unit flat road.
#include <stdio.h>
void chicek ( int road [ ] , int L , const int need1 , int *max_long )
{
int i , LL = 0 ;
road [ need1 ] = 1 ;
for ( i = 0 ; i < L ; i ++ )
{
if ( road [ i ] == 1 )
{
LL ++ ;
if ( LL > *max_long )
{
*max_long = LL ;
}
}
else
LL = 0 ;
}
road [ need1 ] = 0 ;
}
int main ( )
{
int L , road [ 20 ] = { } , need1 [ 20 ] = { } ;
int i , max_long = 0 , need = 0 ;
scanf ( " %d" , &L ) ;
for ( i = 0 ; i < L ; i ++ )
{
scanf ( " %d" , &road [ i ] ) ;
if ( road [ i ] == 0 )
{
need1 [ need ] = i ;
need ++ ;
}
}
for ( i = 0 ; i < need ; i ++ )
chicek ( road , L , need1 [ i ] , &max_long ) ;
printf ( "We will have a %d-unit flat road.\n" , max_long ) ;
}
西賈市的市民最近常常抱怨路面不平,於是市長打算派人整修道路。然而經費有限,只足夠修補一單位長度的道路。市長希望你幫他計算,如何修補道路,可以讓修補後連續平整的道路長度最長。底下我們以一連串的數字代表道路狀況,1 表示平整道路,0 表示坑洞。
1 1 0 0 1 0 1 0 1 1
若將上述道路狀況儲存於一維整數陣列:
如果修補位置 [2],修補後的連續平整道路長度最長為 3([0]-[2])。
如果修補位置 [3],修補後的連續平整道路長度最長為 2([0]-[1]、[3]-[4]、[8][-[9])。
如果修補位置 [5],修補後的連續平整道路長度最長為 3([4]-[6])。
如果修補位置 [7],修補後的連續平整道路長度最長為 4([6]-[9])。
西賈市的道路最長只有20單位,市長會輸入一條道路的情況(第一行為道路長度,第二行為道路狀況),保證至少有一個坑洞。你的程式需輸出修補後連續平整道路的最長長度。
【範例輸入1】
10
1 1 0 0 1 0 1 0 1 1
【範例輸出1】
We will have a 4-unit flat road.
【範例輸入2】
9
1 0 1 0 1 1 1 1 1
【範例輸出2】
We will have a 7-unit flat road.
#include <stdio.h>
void chicek ( int road [ ] , int L , const int need1 , int *max_long )
{
int i , LL = 0 ;
road [ need1 ] = 1 ;
for ( i = 0 ; i < L ; i ++ )
{
if ( road [ i ] == 1 )
{
LL ++ ;
if ( LL > *max_long )
{
*max_long = LL ;
}
}
else
LL = 0 ;
}
road [ need1 ] = 0 ;
}
int main ( )
{
int L , road [ 20 ] = { } , need1 [ 20 ] = { } ;
int i , max_long = 0 , need = 0 ;
scanf ( " %d" , &L ) ;
for ( i = 0 ; i < L ; i ++ )
{
scanf ( " %d" , &road [ i ] ) ;
if ( road [ i ] == 0 )
{
need1 [ need ] = i ;
need ++ ;
}
}
for ( i = 0 ; i < need ; i ++ )
chicek ( road , L , need1 [ i ] , &max_long ) ;
printf ( "We will have a %d-unit flat road.\n" , max_long ) ;
}