演算法競賽入門經典 第三章 課後習題(第一部分)

2021-06-29 16:49:50 字數 1706 閱讀 8631

課後習題第三波來了,到第三章之後**之類的稍微變長了一些,所以我把這一章的答案分為幾部分。這一章重點是字串的處理,對於字串問題,通常只要細心就沒有問題了,下面不多說了直接上詳解。

習題3-1 分數統計(stat)

任務1:這個比較簡單就直接上**了:

#include #include #include #define maxn 100 + 10

int cmp(const void*a,const void*b)

int main()

max=a[0];

for( i = 1; i < maxn; i++)

} for( i = 0, j = 0; i < maxn; i++)

} qsort(stu,j,sizeof(stu[0]),cmp);

for( i = 0; i < j; i++)

printf("\n");

return 0;

}

任務2:這個相對任務1難度就加大許多了,其中這一題,在使用 qsort 函式時還有乙個小細節要注意,就是在return 時,對於double型的要使用 三元運算子,如果按照之前的處理方法會造成錯誤,錯誤來自於浮點數的誤差。這一題我的處理方法與第一題類似,但是要與第一題整數類似,就必須做出一點犧牲,然而我犧牲了記憶體。**如下:

#include #include #include #define maxn 10000 + 100

int cmp(const void*a,const void*b)

int main()

max=a[0];

for( i = 1; i < maxn; i++)

} for( i = 0, j = 0; i < maxn; i++)

} qsort(stu,j,sizeof(stu[0]),cmp);

for( i = 0; i < j; i++)

printf("\n");

return 0;

}

習題3-2 單詞長度(word)

這一題比較簡單,只需要注意 數單詞 數的時候小心一些就好了

#include #include #define maxn 10000 + 100

char str[maxn];

int main()

printf("count = %d,sum = %d\n",count,sum);

printf("%.2lf\n",1.0*sum/count);

return 0;

}

習題3-3 乘積的末三位(product)

這一題的分兩步,第一步將含有大小寫字母的字串捨棄,第二部分將純數字的字串轉化為數字進行運算。這樣一來問題就清晰了,**如下:

#include #include #include int isnum(char *a,int len)

return 1;

}int main()

} printf("%03d\n",p);

} return 0;

}

對於【第三章】的其他習題,會在後面的文章繼續

【第一章】課後習題詳解:傳送門

【第二章】課後習題詳解:傳送門

【第三章】第二部分:傳送門



《演算法競賽入門經典》第三章習題3 4

題目名稱 計算器 題目描述 編寫程式,讀入一行恰好包含乙個加號 減號或乘號的表示式,輸出它的值。這個運算子保證是二元運算子,且兩個運算子均不超過100的非負整數。運算子和運算子可以緊挨著,也可以用乙個或多個空格 tab隔開。行首末尾均可以有空格。樣例輸入 1 1 樣例輸出 2 樣例輸入 2 5 樣例...

演算法競賽入門經典 第2版 課後習題 第三章

c 語言版實現 2 字串的總長度 3 複製字串 str2 到字串 str1 4 比較字串 str2 到字串 str1 strcmp s1,s2 5 查詢字串 str 中字元 ch 的第一次出現的位置 6 查詢向字串 str1 中字串 str2 的第一次出現的位置 使用cin輸入字串方式 1 接受乙個...

演算法競賽入門經典 第三章

最長回文子串 當字串的長度比較小的時候 attention 最好把陣列開在外面,如果開在main外面並且陣列太大,就會異常退出的。最長回文子串 include include include define maxn 5000 10 char buf maxn s maxn int main prin...