C#每日一練 (5.25)
阿新 • • 發佈:2019-02-06
練習1:一列數的規則如下: 1、1、2、3、5、8、13、21、34......求第30位數是多少, 用遞迴演算法實現。
練習2:有一個3*4矩陣,輸出最大元素的值,及其所在的行號和列號, int a[3][4]={{1,2,3,4},{9,8,7,6}, {-10,10,-5,2}}。
練習1寫完程式碼感覺並不是很好,於是百度找了下答案,可見自己對遞迴理解不夠。(如下)/// <summary> /// 求滿足{1,1,2,3,5,8,13,21,34}此規律的第n位數的值 /// </summary> /// <param name="a1">數列的第一個數</param> /// <param name="a2">數列的第二個數</param> /// <param name="i">遞迴計數,固定值為 1 </param> /// <param name="n">需求的第n位數</param> private static void FindNum(int a1, int a2, int i, int n) { try { //列印從第三位數開始,到第n位結束的所有值 //Console.WriteLine(a1 + a2); //對遞迴計數,試圖除以0時退出遞迴 i++; int temp = 1 / (n - 1 - i); //得到第三個數的值 int a3 = a1 + a2; //將a2和a3作為形參遞迴 FindNum(a2, a3, i, n); } catch (DivideByZeroException e) { //只打印第n位的值 Console.WriteLine(a1 + a2); } }
private static int Find(int i)
{
if (i <= 0)
return 0;
else if (i > 0 && i <= 2)
return 1;
else return Find(i - 1) + Find(i - 2);
}
練習2:有一個3*4矩陣,輸出最大元素的值,及其所在的行號和列號, int a[3][4]={{1,2,3,4},{9,8,7,6}, {-10,10,-5,2}}。
練習3:實現二分法查詢,int a[8] = {3,12,24,36,55,68,75,88},查詢24需要幾次查找出來。namespace Practice_5._25 { class Program { static void Main(string[] args) { #region 練習2 int[,] a = { { 1, 2, 3, 4 }, { 9, 8, 7, 6 }, { -10, 10, -5, 2 } }; int max = a[0, 0]; //將二維陣列的第0行0列設為最大值 int maxRow = 0; //記錄最大值所在的行數 int maxColumn = 0; //記錄最大值所在的列數 for (int i = 0; i < a.GetLength(0); i++) { for (int j = 0; j < a.GetLength(1); j++) { if (max < a[i, j]) { max = a[i, j]; maxRow = i; maxColumn = j; } } } Console.WriteLine("最大值為:{0},行數為:{1},列數為:{2}", max, maxRow + 1, maxColumn + 1); #endregion Console.ReadKey(); } }
/// <summary>
/// 二分法查詢陣列的值
/// </summary>
/// <param name="array">有序陣列</param>
/// <param name="value">需查詢的值</param>
/// <returns>返回找到的下標,未找到返回-1</returns>
private static int DichotomySearch(int[] array, int value)
{
int mix = 0; //陣列最小值下標
int max = array.Length - 1; //陣列最大值下標
int i = 0; //查詢次數計數
while (mix < max)
{
int mid = (max + mix) / 2; //陣列中間值下標
if (value == array[mid])
{
i++;
//輸出查詢次數
Console.WriteLine("查詢次數為:" + i);
return mid; //找到返回陣列的下標
}
else if (value < array[mid])
{
//查詢值比中間值小,縮小查詢區間為[array[mix],arrary[mid]]
max = mid;
i++;
}
else
{
//查詢值比中間值大,縮小查詢區間為[arrary[mid],arrary[max]]
mix = mid;
i++;
}
}
//沒找到返回 -1
return -1;
}
練習4:實現氣泡排序, int[] array = { 23,45,16,7,42 }。 /// <summary>
/// 實現一個數組的升序排列
/// </summary>
/// <param name="arrary">需排序的陣列</param>
private static void Sort(int[] arrary)
{
for (int i = 0; i < arrary.Length - 1; i++)
{
for (int j = 0; j < arrary.Length - 1 - i; j++)
{
//升序排列
if (arrary[j] > arrary[j + 1])
{
arrary[j] = arrary[j] + arrary[j + 1];
arrary[j + 1] = arrary[j] - arrary[j + 1];
arrary[j] = arrary[j] - arrary[j + 1];
}
}
}
for (int k = 0; k < arrary.Length; k++)
{
Console.Write(arrary[k] + " ");
}
}
練習題目來源網路。