零基礎學C#算法(零基礎學算法——C#版)


今天本人正在看算法方面的書。作為高中數學忘得差不多的渣渣,實在無力。無奈找了本書,c語言寫的,哎。我就把其中代碼翻譯成C#版好了。此坑能否填平,看我耐性和網絡支持條件吧。有生之年能看完的話我會把整個項目上傳的。

 那就開坑吧。為了直觀性舍棄代碼規范性,所以如果有人不幸看到,不要吐槽,謝謝。

從第一章開始。

   public class _1_1看商品猜價格

    {
         public  void 看商品猜價格()
        {
            Console.WriteLine( " 設置商品真實價格 ");
             int 真正價格 =  int.Parse(Console.ReadLine());
            Console.WriteLine( " 設置猜測價格 ");
             int 猜測價格 =  int.Parse(Console.ReadLine());
             int 猜測次數 =  1;
             while (猜測價格 != 真正價格)
            {
                猜測次數++;
                Console.WriteLine( " 繼續猜 ");
                猜測價格 =  int.Parse(Console.ReadLine());
            }
            Console.WriteLine( " 你猜了 " + 猜測次數+ " 次才猜中 ");

             // Console.WriteLine("  ");
        }
    }

 

   public class _1_2斐波那契數列

    {
         public  long i =  0;
         public  void 計算斐波那契數列()
        {
             // 1.3.2 順推實例:斐波那契數列
            Console.WriteLine( " 設置N ");
             long N =  long.Parse(Console.ReadLine());

            tailrecursion( 11, N);

             // long sum = 0;
            
// for (long i = 0; i <= N; i++)
            
// {
            
//     Console.WriteLine(i + " " + sum);
            
//     sum += 斐波那契數列(i);            
            
//
        }

         public  void tailrecursion( long a,  long b,  long n)
        {
             if (n== 0)
            {
                 return;
            }           
            i++;
            Console.WriteLine(i +  "   " + (a + b)); 
            tailrecursion(b,a+b, n -  1);
            n--;
        }

         public  long 斐波那契數列( long n)
        {
             if (n <=  2)
            {
                 return  1;
            }
             else
            {
                 return 斐波那契數列(n -  1) + 斐波那契數列(n -  2);
            }     
        }


    }

實現了2種 

網上那種 計算斐波那契數列的C#實現(注釋的代碼)完全是垃圾!垃圾的地方在於遞歸方法調用2次,在N越來越大的時候非常明顯,而用尾遞歸(tailrecursion
的話飛速算完。不幸的原文用的就是我注釋的那部分方法。

 

  class _1_3用逆推法求最初存錢數

    {
        public  void 求最初存錢數()
        {
             int 本息 =  1000;
            Double 年利率 =  0.0171;

             double[] 本利合計 = new  double[ 49];
             int i;
            本利合計[ 48] = 本息;
             for ( i =  47;i >  0; i--)
            {
                本利合計[i] = (本利合計[i +  1] + 本息) / ( 1 + 年利率/ 12);                  
            }
             for ( i =  48; i >  0; i--)
            {
                Console.WriteLine( " "+i+ " 月末本利合計: "+本利合計[i]);    
            }
            
        }       

    }

 

   class _1_4用枚舉法完成填數游戲

    {
         public  void 用枚舉法完成填數游戲()
        {

             int i1, i2, i3, i4, i5;
             long multi, result;
             for (i1 =  1; i1 <=  9; i1++)
            {
                 for (i2 =  0; i2 <=  9; i2++)
                {
                     for (i3 =  0; i3 <=  9; i3++)
                    {
                         for (i4 =  0; i4 <=  9; i4++)
                        {
                             for (i5 =  1; i5 <=  9; i5++)
                            {
                                multi = i1 *  10000 + i2 *  1000 + i3 *  100 + i4 *  10 + i5;
                                result = i5 *  111111;
                                 if (multi * i1 == result)
                                {
                                    Console.WriteLine(i1 +  "" + i2 +  "" + i3 +  "" + i4 +  "" + i5);
                                    Console.WriteLine( " X " + i1);
                                    Console.WriteLine( " ____________ ");
                                    Console.WriteLine(i5 +  "" + i5 +  "" + i5 +  "" + i5 +  "" + i5 +  "" + i5);
                                }
                            }
                        }
                    }
                }
            }
        }
    }


1-6使用遞歸算法計算階乘 

             int i;
            Console.WriteLine( " 請輸入要求階乘的一個整數: ");
            i =  int.Parse(Console.ReadLine());
            Console.WriteLine(i+ " 的階乘結果為: "+fact(i));
        }
         int fact( int n)
        {
             if (n <=  1)
                 return  1;
             else
                 return n * fact(n -  1);
        }

 

 1_8兵乓球比賽日程安排

         int[,] a =  new  int[ 6565];
         public  void Run()
        {
             int m, i, j;
            Console.WriteLine( " 輸入參賽選手人數: ");
            m =  int.Parse(Console.ReadLine());
            j =  2;
             for (i =  2; i <  8; i++)
            {
                j = j *  2;
                 if (j == m)
                     break;
            }
             if (i >=  8)
            {
                Console.Write( " 參賽選手人數必須為2的整數次冪,且不超過64!\n ");
            }
            gamecal( 1, m);
            Console.Write( " \n編號 ");
             for (i =  2; i <= m; i++)
            {
                Console.Write( i -  1+ " 天  ");
            }
            Console.WriteLine( " \n ");
             for (i =  1; i <= m; i++)
            {
                 for (j =  1; j <= m; j++)
                    Console.Write( "   " + a[i, j] +  "   ");
                Console.Write( " \n ");
            }
        }
         private  void gamecal( int k,  int n)
        {

             int i, j;
             if (n ==  2)
            {
                a[k,  1] = k;   // 參賽選手編號
                a[k,  2] = k +  1// 對陣選手編號
                a[k +  11] = k +  1// 參賽選手編號 
                a[k +  12] = k;  // 對陣選手編號 
            }
             else
            {
                gamecal(k, n /  2);
                gamecal(k + n /  2, n /  2);
                 for (i = k; i < k + n /  2; i++)  // 填充右上角 
                {
                     for (j = n /  2 +  1; j <= n; j++)
                    {
                        a[i, j] = a[i + n /  2, j - n /  2];
                    }
                }
                 for (i = k + n /  2; i < k + n; i++)  // 填充左下角 
                {
                     for (j = n /  2 +  1; j <= n; j++)
                    {
                        a[i, j] = a[i - n /  2, j - n /  2];
                    }
                }
            }
        }

 

 1-9用貪婪算法求找零錢

View Code 

 

 1-11用試探法生成彩票組合

View Code 

 

1-12模擬法猜數游戲 

View Code 

 

1-13模擬法擲骰子游戲 

View Code

 

 

DDD


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM