演算法筆記-第三章題目解
阿新 • • 發佈:2020-08-12
背景
最近在惡補資料結構和演算法相關的知識,查詢到一本比較好的書籍演算法筆記,然後就開始學習了,學完第二章C/C++語言基礎後,做了第三章的題目,雖然書上已經有題解了,但是還是想發表這篇文章,原因是通過記錄下來我的學習過程,以提醒和鼓勵自己。
第三章題解
#include <stdio.h> #include <cstring> int main() { } /** * 說反話 * @return */ int reverseWords() { char strOri[80] = {}; char words[40][80] = {}; gets(strOri); int rowNum = 0; int colNum = 0; for (int i = 0; i < strlen(strOri); ++i) { //不是空格的就放入二維陣列,直到遇到空格,改成下一行 if (strOri[i] != ' ') { words[rowNum][colNum] = strOri[i]; colNum++; } else { rowNum++; colNum = 0; } } //倒敘輸出二維陣列的單詞 for (int i = rowNum; i >= 0; i--) { printf("%s ", words[i]); } } /** * 判斷迴環字串 * @return */ int loopback() { char str[256] = {}; scanf("%s", str); int length = strlen(str); for (int i = 0; i < length / 2; ++i) { if (str[i] != str[length - i - 1]) { printf("%s", "NO"); return 0; } } printf("%s", "YES"); return 0; } /** * 進位制轉換 * @return */ int baseChange() { //a,b<= 2^30 -1,1<n<=10 //a+b<= 2^31 -2 //int 範圍:2^31-1,所以a+b可以用int來接收 int a, b, d; scanf("%d%d%d", &a, &b, &d); int sum = a + b; int resultNumber[32] = {0}; //除基取餘 int i = 0; for (;; ++i) { resultNumber[i] = sum % d; if (sum / d == 0) { break; } sum = sum / d; } for (int j = i; j >= 0; j--) { printf("%d", resultNumber[j]); } return 0; } /** * 日期計算器 * @return */ int dateCal() { int date1, date2; scanf("%d%d", &date1, &date2); if (date1 > date2) { int tmp = date1; date1 = date2; date2 = tmp; } int yy1 = date1 / 10000, mm1 = date1 % 10000 / 100, dd1 = date1 % 100; int yy2 = date2 / 10000, mm2 = date2 % 10000 / 100, dd2 = date2 % 100; //第一個日期不斷加N天,直到等於第二個日期 int n = 0; while (true) { //構建新日期串 dd1 = dd1 + 1; int ddlast = 0; bool is31 = mm1 % 2 == 1 || mm1 == 8; if (is31) { ddlast = 31; } else if (mm1 == 2) { //判斷是否閏年 bool isRun = (yy1 % 4 == 0 && yy1 % 100 != 0) || (yy1 % 400 == 0) ? true : false; if (isRun) { ddlast = 29; } else { ddlast = 28; } } else { ddlast = 30; } if (dd1 > ddlast) { dd1 = 1; mm1 = mm1 + 1; } if (mm1 > 12) { mm1 = 1; yy1 = yy1 + 1; } if (!(dd1 == dd2 && mm1 == mm2 && yy1 == yy2)) { n += 1; } else { break; } } printf("%d", n + 2); return 0; }