概述
在IT行業中,通常被人稱為:碼農,程式猿。在日常開發中,我們不能滿足於程式碼的搬運,不能只會百度搜尋,Copy和Paste。猶記春節假期,走親訪友,觥籌交錯,席間有一位長輩問:你現在做什麼工作呀?我很驕傲地說:我目前是系統架構師,主要負責系統的最佳化與重構。可是他卻愣了很久,但當表妹在旁邊補上一句“碼農“時,長輩瞬間秒懂,笑呵呵的說道:不錯不錯。卻留我受傷的心在風中凌亂。
為了避免成為碼農,我們必須對編碼保持熱情,並持續學習;必須保持好奇心,樂於探求事物本質;必須對所做的工作及時總結,主動最佳化程式碼,讓系統變得更加有機;必須主動嘗試更好的開發方式、更先進的工具,來提升開發效率,並想辦法避免重複性的工作;必須不斷改進設計,將程式設計變成創造性的工作。
以下以一些簡單的小例子,介紹C#基礎內容,拋磚引玉,共同進步,如有不足之處,還請指正。
給定一個不超過5位數的正整數,判斷是幾位數,並逐行列印個位,十位,百位,千位,萬位上的值
透過分析,此處主要有兩個功能:
以下有幾種方案計算位數(孰優孰劣,歡迎點評):
1. 透過比較法進行判斷,簡單直接有效
- /// <summary>
- /// 判斷位數,直接比較
- /// </summary>
- /// <param name="num"></param>
- static int CheckDigit1(int num)
- {
- int digit = 0;
- if (num < 10)
- {
- digit = 1;
- }
- else if (num < 100)
- {
- digit = 2;
- }
- else if (num < 1000)
- {
- digit = 3;
- }
- else if (num < 10000)
- {
- digit = 4;
- }
- else if (num < 100000)
- {
- digit = 5;
- }
- else
- {
- digit = -1;
- }
- Console.WriteLine(digit);
- return digit;
- }
複製程式碼
2. 透過整除法進行判斷
- /// <summary>
- /// 判斷位數:引入了不該有的計算
- /// </summary>
- /// <param name="num"></param>
- static int CheckDigit2(int num)
- {
- int digit = 0;
- if (num / 10000 > 0)
- {
- digit = 5;
- }
- else if (num / 1000 > 0)
- {
- digit = 4;
- }
- else if (num / 100 > 0)
- {
- digit = 3;
- }
- else if (num / 10 > 0)
- {
- digit = 2;
- }
- else {
- digit = 1;
- }
- Console.WriteLine(digit);
- return digit;
- }
複製程式碼
3. 引入折半思想進行判斷
- /// <summary>
- /// 採用折半思想
- /// </summary>
- /// <param name="num"></param>
- static int CheckDigit3(int num)
- {
- int digit = 0;
- if (num >= 100)
- {
- if (num >= 10000)
- {
- digit = 5;
- }
- else if (num >= 1000)
- {
- digit = 4; ;
- }
- else {
- digit = 3;
- }
- }
- else {
- if (num >= 10)
- {
- digit = 2;
- }
- else {
- digit = 1;
- }
- }
- Console.WriteLine(digit);
- return digit;
- }
複製程式碼
4. 透過轉換為字串,判斷字串的長度來確定位數
- /// <summary>
- /// 透過字串計算位數
- /// </summary>
- /// <param name="num"></param>
- static int CheckDigit4(int num) {
- string strNum = num.ToString();
- int digit = strNum.Length;
- Console.WriteLine(digit);
- return digit;
- }
複製程式碼
列印每一位上的數字,按照從低位到高位進行列印(透過相減的方式)
- /// <summary>
- /// 列印每一位數字,從低到高
- /// </summary>
- /// <param name="num"></param>
- /// <param name="digit"></param>
- static void PrintNumber(int num, int digit) {
- int tmp = num;
- for (int i = 0; i < digit; i++) {
- int n = tmp / 10;
- Console.WriteLine(tmp - n * 10);
- tmp = n;
- }
- }
複製程式碼
另一種方案:列印每一位上的數字,按照從低位到高位進行列印(透過求餘的方式)
- /// <summary>
- /// 列印每一位數字,從低到高
- /// </summary>
- /// <param name="num"></param>
- /// <param name="digit"></param>
- static void PrintNumber2(int num, int digit) {
- int tmp = num;
- for (int i = 0; i < digit; i++)
- {
- int n = tmp / 10;
- Console.WriteLine(tmp % 10);
- tmp = n;
- }
- }
複製程式碼
從高位到低位進行列印(For迴圈)
- /// <summary>
- /// 從高到低列印
- /// </summary>
- /// <param name="num"></param>
- /// <param name="digit"></param>
- static void PrintNumber3(int num, int digit)
- {
- int tmp = num;
- for (int i = 0; i < digit; i++)
- {
- int n = tmp / (int)Math.Pow(10, digit - i - 1);
- Console.WriteLine(n);
- tmp -= n * (int)Math.Pow(10, digit - i - 1);
- }
- }
複製程式碼
另外一種方案:從高位到低位進行列印,採用while迴圈
- static void PrintNumber4(int num, int digit) {
- int tmp = num;
- int div = (int)Math.Pow(10, digit - 1);
- while (tmp > 0) {
- int n = tmp / div;
- Console.WriteLine(n);
- tmp -= n * div;
- div /= 10;
- }
- }
複製程式碼
列印一個邊長為n的正方形
功能說明:主要是列印一個,長和寬個數相同的*號的形狀。
透過分析,主要有兩點:
-
第一行與最後一行,第一列與最後一列,都是*
號,其他都是空格;
- 最後一列需要換行
- /// <summary>
- /// 列印一個邊長為n的正方形
- /// </summary>
- /// <param name="n"></param>
- static void PrintSquare1(int n) {
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- string info = string.Empty;
- if (i == 0 || i == n - 1 || j == 0 || j == n - 1)
- {
- info = "*";
- }
- else {
- info = " ";
- }
- if (j == n - 1)
- {
- Console.WriteLine(info);
- }
- else {
- Console.Write(info);
- }
- }
- }
- }
複製程式碼
求100以內的奇數和
定義:不能被2整除的整數叫奇數,也叫單數,如1、3、5、7、9、……。
透過分析發現:只要對2求餘,餘數大於0,則為奇數,如下所示:
- /// <summary>
- /// 求100以內的奇數的和
- /// </summary>
- static void GetOddSum() {
- int total = 0;
- for (int i = 0; i < 100; i++) {
- if (i % 2 != 0) {
- total += i;
- }
- }
- Console.WriteLine(total);
- }
複製程式碼
另外一種方案:奇數與偶數是交替出現的,如第一個數是奇數,則加2還是奇數,如下所示:
- /// <summary>
- /// 求100以內的奇數的和
- /// </summary>
- static void GetOddSum2()
- {
- int total = 0;
- for (int i = 1; i < 100; i += 2)
- {
- total += i;
- }
- Console.WriteLine(total);
- }
複製程式碼
列印九九乘法表
正向九九乘法表,透過分析發現,第一個乘數(j)小於等於第二個乘數(i),如下所示:
- /// <summary>
- /// 列印九九乘法表
- /// </summary>
- static void PrintMultiplicationTable() {
- for (int i = 0; i < 9; i++) {
- for (int j = 0; j < 9; j++)
- {
- if (i > j)
- {
- Console.Write("{0}*{1}={2} ", j + 1, i + 1, (i + 1) * (j + 1));
- }
- if (i == j) {
- Console.WriteLine("{0}*{1}={2} ", j + 1, i + 1, (i + 1) * (j + 1));
- }
- }
- }
- }
複製程式碼
另外一種方案:倒打九九乘法表,透過分析發現,第一個乘數(j)大於等於第二個乘數(i),如下所示:
- /// <summary>
- /// 倒打九九乘法表
- /// </summary>
- static void PrintMultiplicationTable2()
- {
- for (int i = 0; i < 9; i++)
- {
- for (int j = 0; j < 9; j++)
- {
- if (i < 9 - j - 1)
- {
- Console.Write("{0}*{1}={2} ", j + 1, 9 - i, (9 - i) * (j + 1));
- }
- else if (i == 9 - j - 1)
- {
- Console.WriteLine("{0}*{1}={2} ", j + 1, 9 - i, (9 - i) * (j + 1));
- }
- }
- }
- }
複製程式碼
斐波那契數列
定義:斐波那契數列,又稱黃金分割數列,指的是這樣一個數列:0、1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞迴的方法定義:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)。
透過分析發現:
-
第0
項是
0
,第
1
項是第一個
1
。
-
這個數列從第3
項開始,每一項都等於前兩項之和。
- /// <summary>
- /// 列印斐波那契數列,10以內
- /// </summary>
- static void PrintFibonacci() {
- int cur = 0;
- int pre1 = 0;
- int pre2 = 0;
- for (int i = 0; i < 30; i++) {
- if (i == 0)
- {
- pre2 = 0;
- pre1 = 0;
- cur = 0;
- }
- else if (i == 1)
- {
- pre2 = 0;
- pre1 = 0;
- cur = 1;
- }
- else if (i == 2) {
- pre2 = pre1;
- pre1 = 1;
- cur = 1;
- }
- else {
- pre2 = pre1;
- pre1 = cur;
- cur = pre1 + pre2;
- }
- Console.WriteLine(cur);
- }
- }
複製程式碼
備註
我們永遠不會忘記寫的第一個程式--“Hello,World!”因為那承載著程式設計師最初的夢想:改變世界。
雖然我們不一定能成為大師,但從不甘心做一個碼農,程式設計師不是碼農,碼農也不是真正的程式設計師。
我們可以自謙,可以自嘲,但不能自我定位於碼農,止步於碼農。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69965343/viewspace-2679239/,如需轉載,請註明出處,否則將追究法律責任。