|
Post by huangno1 on Mar 2, 2017 20:17:19 GMT -8
程式說明
給兩個整數序列,它們的相似度計算方式以下例說明之:
序列A 3 1 4 5 8 7 5 2 4 3
序列B 1 5 4 5 8 6 5 1 4 3
累積分 0 0 1 2 3 0 1 0 1 2
所謂累積分代表的是連續幾個位置相同,例如第三、第四、第五個位置的值都相同,因此累積分會由1加至2再加至3;當第六個位置的值不同時,累積分就會歸零。兩個序列的相似度定義為累積分的總和,以上例來說,就是 0 + 0 + 1 + 2 + … + 1 + 2 = 10。
這個超級霹靂無敵簡單的題目就是列印計算相似度的過程以及輸出相似度。假設序列長度不超過10。
【輸入範例一】
3
1 2 3
1 4 3
【輸出範例一】
1 2 3
1 4 3
1 0 1
[2]
【輸入範例二】
10
3 1 4 5 8 7 5 2 4 3
1 5 4 5 8 6 5 1 4 2
【輸出範例二】
3 1 4 5 8 7 5 2 4 3
1 5 4 5 8 6 5 1 4 2
0 0 1 2 3 0 1 0 1 0
[8]
#include <stdio.h>
int main()
{
int t ;
scanf ( "%d" , &t ) ;
char A [ t ] , B [ t ] ;
int score = 0 , sum = 0 , i ;
for ( i = 0 ; i < t ; i ++ )
{
scanf ( "%d" , &A [ i ] ) ;
}
for ( i = 0 ; i < t ; i ++ )
{
scanf ( "%d" , &B [ i ] ) ;
}
for ( i = 0 ; i < t ; i ++ )
{
printf ( "%d " , A [ i ] ) ;
}
printf ( "\n" ) ;
for ( i = 0 ; i < t ; i ++ )
{
printf ( "%d " , B [ i ] ) ;
}
printf ( "\n" ) ;
for ( i = 0 ; i < t ; i ++ )
{
if ( A [ i ] == B [ i ] )
{
score ++ ;
printf ( "%d " , score ) ;
sum += score ;
}
else
{
score = 0 ;
printf ( "%d " , score ) ;
}
}
printf ( "\n[%d]" , sum ) ;
return 0;
}
|
|