1の#include <stdio.hの> 2の#include <STDLIB.H> 3の#include < 文字列・H> 4 チャー S [ 2000 ]。 5 int型 NUM [ 2000 ]、キュー[ 2000 ]; 6 ボイドので(INT S []、INT L、INT R) 7 { 8 場合(L> = R)リターン; 9 INT iはLを=、J = R。 10 INT一時= S [L]。 11 一方(I < J) 12 { 13 ながら(I <J && S [J]> = TEMP)j-- 。 14の S [I] = S [J]。 15 一方(I <J && S [i]が<= TEMP)iが++ ; 16の S [J] = S [i]は、 17 } 18 S [I] = TEMP。 19 それほど(S、L、I- 1 )。 20 したがって、(S、I + 1 、R)。 21 } 22 のint main()の 23 { 24 ながら(〜のscanf(" %S " 、S)) 25 { 26 int型のトップ=0 、I; 27 INT LEN = STRLEN(S)。 28 のmemset(NUM、0、はsizeof (NUM))。 29 のmemset(キュー、0、はsizeof (キュー))。 30 のためには、(iは= 0 ; iは<lenは、I ++ ) 31 { 32 NUM [S [I]] ++ ; 33 } 34 のためには、式(I = 0、I < 500 ; I ++ ) 35 { 36 であれば(NUMを[I] =!0 ) 37 { 38 キュー[トップ++] = NUM [I]。 39 } 40 } 41 それほど(キュー、0、トップ1 )。 42は、 INT =こと0 。 43 INTの和= 0 。 44 // ----------------------------------------------- ----------------------- 45 ながら(BE =!トップ) 46 { 47 INT X =キュー[++です]。 48 もし(可能!= 上) 49 { 50 int型、Y =キュー[++です]。 51 キュー[トップ++] = X + Y。 52 合計=合計+ X + Y。 53 それほど(キューは、であり、トップ1 )。 54 } 55 } 56 のprintf(" %D%D%.1lf \ n "、8 * LEN、和、8.0 * LEN / 合計)。 57 } 58 リターン 0 。 59 }