前言 - 簡介git
咱們在寫代碼的過程當中, 不可避免的重度依賴所處的開發環境. 本文重點帶你們在 Window 搭建 Cshell
簡單控制檯項目. 看成存檔, 用於記錄項目搭建各類重複操做. 在詳細過程以前, 咱們約定下基礎環境數據庫
Best new version Windowapi
Best new version Visual Studio多線程
例如筆者當前是 Windows 10 + Visual Studio 2019, 其中 Windows 推薦開啓 UTF-8 支持. spa
那此間, 騷年去喚醒本身的道 ~ 命令行
正文 - 過程線程
正文分三個過程. 其一是 Visual Studio C Consule 經常使用設置. 其二是導出模板, 來解放生產力. 其三演示使用.調試
Visual Studio C Consule 經常使用設置rest
1. 建立 c_template 項目
2. 只保留 x64 環境
人的精氣有限, 作釘子更省力.
3. 添加基礎 main.c
4. Visual Studio 項目詳細配置
導出模板
上面這些每次操做都添加, 很噁心. 咱們能夠經過 [項目] -> [導出模板] 一勞永逸. ~
1. 前戲
找到 c_template.vcxproj 項目文件, 經過你的慧眼, 將其中全部關於 Win32 相關的 xml 配置刪除.
2. 導出模板
[項目] -> [導出模板]
添加額外補充
(圖片什麼的能夠因本身喜愛本身整)
演示使用
最終生成以下模板內容
不妨既興經過這個模板演示一段代碼
#include <stdio.h> #include <float.h> #include <errno.h> #include <assert.h> #include <limits.h> #include <stdlib.h> #include <string.h> #include <stddef.h> #include <stdint.h> #include <stdbool.h> /* 題目: 地上右一個 m 行 n 列的方格. 一個機器人從座標(0, 0) 的格子開始移動, 它每次能夠向左, 右, 上, 下移動一格, 但不能進入行座標和列座標的數位之和大於 k 的格子. 例如, 當 k 爲 18 的時候, 機器人可以進入方格 (35, 37), 由於 3 + 5 + 3 + 7 = 18. 但它不能進入方格 (35, 38), 由於 3 + 5 + 3 + 9 = 19. 請問該機器人可以到達多少個格子? */ extern int moving_count(int m, int n, int threshold); int main(int argc, char * argv[]) { int m = 20, n = 20, threshold = 10; int count = moving_count(m, n, threshold); printf("<m = %d, n = %d, threshold = %d> -> %d\n", m, n, threshold, count); return 0; } struct visite { int rows; int cols; int threshold; bool visited[]; }; inline struct visite * visite_create(int rows, int cols, int threshold) { struct visite * v = malloc(sizeof(struct visite) + (rows * cols) * sizeof (int)); assert(v && rows > 0 && cols > 0 && threshold > 0); v->rows = rows; v->cols = cols; v->threshold = threshold; memset(v->visited, 0, (rows * cols) * sizeof (int)); return v; } inline void visite_delete(struct visite * v) { if (v) free(v); } static inline int get_digit_sum(int num) { int sum = 0; while (num > 0) { sum = num % 10; num /= 10; } return sum; } inline bool visite_check(struct visite * v, int row, int col) { if (row >= 0 && row < v->rows && col >= 0 && col < v->cols && !v->visited[row * v->cols + col]) { return get_digit_sum(row) + get_digit_sum(col) <= v->threshold; } return false; } int visite_moving(struct visite * v, int row, int col) { if (!visite_check(v, row, col)) return 0; v->visited[row * v->cols + col] = true; return 1 + visite_moving(v, row, col - 1) + visite_moving(v, row, col + 1) + visite_moving(v, row - 1, col) + visite_moving(v, row + 1, col); } int moving_count(int m, int n, int threshold) { if (m < 0 || n < 0 || threshold < 0) return 0; if (threshold == 0) return 1; struct visite * v = visite_create(m, n, threshold); int count = visite_moving(v, 0, 0); visite_delete(v); return count; }
(有心的道友, 也能夠轉成棧回溯. )
後記 - 展望
錯誤是不免的, 歡迎朋友指正互相印證苦中做樂.
立秋 - 劉翰 - 南宋 乳鴉啼散玉屏空,一枕新涼一扇風。 睡起秋聲無覓處,滿階梧桐月明中。