今天本人正在看算法方面的书。作为高中数学忘得差不多的渣渣,实在无力。无奈找了本书,c语言写的,哎。我就把其中代码翻译成C#版好了。此坑能否填平,看我耐性和网络支持条件吧。有生之年能看完的话我会把整个项目上传的。

那就开坑吧。为了直观性舍弃代码规范性,所以如果有人不幸看到,不要吐槽,谢谢。

从第一章开始。

public class _1_1看商品猜价格

    {

        public void 看商品猜价格()

        {

            Console.WriteLine("设置商品真实价格");

            int 真正价格 = int.Parse(Console.ReadLine());

            Console.WriteLine("设置猜测价格");

            int 猜测价格 = int.Parse(Console.ReadLine());

            int 猜测次数 = ;

            while (猜测价格 != 真正价格)

            {

                猜测次数++;

                Console.WriteLine("继续猜");

                猜测价格 = int.Parse(Console.ReadLine());

            }

            Console.WriteLine("你猜了" + 猜测次数+"次才猜中");

            //Console.WriteLine("  ");

        }

    }

public class _1_2斐波那契数列

    {

        public long i = ;

        public void 计算斐波那契数列()

        {

            //1.3.2 顺推实例:斐波那契数列

            Console.WriteLine("设置N");

            long N = long.Parse(Console.ReadLine());

            tailrecursion(, , 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==)

            {

                return;

            }           

            i++;

            Console.WriteLine(i + " " + (a + b)); 

            tailrecursion(b,a+b, n - );

            n--;

        }

        public long 斐波那契数列(long n)

        {

            if (n <= )

            {

                return ;

            }

            else

            {

                return 斐波那契数列(n - ) + 斐波那契数列(n - );

            }     

        }

    }

实现了2种

网上那种 计算斐波那契数列的C#实现(注释的代码)完全是垃圾!垃圾的地方在于递归方法调用2次,在N越来越大的时候非常明显,而用尾递归(tailrecursion
的话飞速算完。不幸的原文用的就是我注释的那部分方法。

class _1_3用逆推法求最初存钱数

    {

       public void 求最初存钱数()

        {

            int 本息 = ;

            Double 年利率 = 0.0171;

            double[] 本利合计 =new double[];

            int i;

            本利合计[] = 本息;

            for ( i = ;i > ; i--)

            {

                本利合计[i] = (本利合计[i + ] + 本息) / ( + 年利率/);                  

            }

            for ( i = ; i > ; i--)

            {

                Console.WriteLine("第"+i+"月末本利合计:"+本利合计[i]);    

            }

            

        }       

    }

class _1_4用枚举法完成填数游戏

    {

        public void 用枚举法完成填数游戏()

        {

            int i1, i2, i3, i4, i5;

            long multi, result;

            for (i1 = ; i1 <= ; i1++)

            {

                for (i2 = ; i2 <= ; i2++)

                {

                    for (i3 = ; i3 <= ; i3++)

                    {

                        for (i4 = ; i4 <= ; i4++)

                        {

                            for (i5 = ; i5 <= ; i5++)

                            {

                                multi = i1 *  + i2 *  + i3 *  + i4 *  + i5;

                                result = i5 * ;

                                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 <= )
                return ;
            else
                return n * fact(n - );
        }

1_8兵乓球比赛日程安排

        int[,] a = new int[, ];
        public void Run()
        {
            int m, i, j;
            Console.WriteLine("输入参赛选手人数:");
            m = int.Parse(Console.ReadLine());
            j = ;
            for (i = ; i < ; i++)
            {
                j = j * ;
                if (j == m)
                    break;
            }
            if (i >= )
            {
                Console.Write("参赛选手人数必须为2的整数次幂,且不超过64!\n");
            }
            gamecal(, m);
            Console.Write("\n编号");
            for (i = ; i <= m; i++)
            {
                Console.Write( i - +"天 ");
            }
            Console.WriteLine("\n");
            for (i = ; i <= m; i++)
            {
                for (j = ; j <= m; j++)
                    Console.Write(" " + a[i, j] + " ");
                Console.Write("\n");
            }
        }
        private void gamecal(int k, int n)
        {             int i, j;
            if (n == )
            {
                a[k, ] = k;  //参赛选手编号
                a[k, ] = k + ; //对阵选手编号
                a[k + , ] = k + ; //参赛选手编号 
                a[k + , ] = k; //对阵选手编号 
            }
            else
            {
                gamecal(k, n / );
                gamecal(k + n / , n / );
                for (i = k; i < k + n / ; i++) //填充右上角 
                {
                    for (j = n /  + ; j <= n; j++)
                    {
                        a[i, j] = a[i + n / , j - n / ];
                    }
                }
                for (i = k + n / ; i < k + n; i++) //填充左下角 
                {
                    for (j = n /  + ; j <= n; j++)
                    {
                        a[i, j] = a[i - n / , j - n / ];
                    }
                }
            }
        }

1-9用贪婪算法求找零钱

1-11用试探法生成彩票组合

1-12模拟法猜数游戏

1-13模拟法掷骰子游戏

DDD

零基础学C#算法(零基础学算法——C#版)的更多相关文章

  1. 答好友困惑:Java零基础如何入门,不知道怎么学,迷茫ING

    作者:程序员小跃 几个星期之前,我在知乎上看到一个提问,说是:对于完全没有经验零基础自身的数学底子也很弱学习Java应该怎么学习呢?想着类似的问题我也有过回答,并且反馈还是蛮好的,就参考之前的思路回答 ...

  2. JVM基础系列开篇:为什么要学虚拟机?

    跟许多人一样,我一开始接触 Java 虚拟机只是因为面试需要用到,所以硬着头皮看看.所以很多人对于为什么要学虚拟机这个问题,他们的答案都是:因为面试.但我经过了几年的学习和实战,我发现其实学习虚拟机并 ...

  3. 1、JavaScript 基础一 (从零学习JavaScript)

    1:定义:javascript是一种弱类型.动态类型.解释型的脚本语言. 弱类型:类型检查不严格,偏向于容忍隐式类型转换. 强类型:类型检查严格,偏向于不容忍隐式类型转换. 动态类型:运行的时候执行类 ...

  4. 从头开始学JavaScript 笔记(一)——基础中的基础

    原文:从头开始学JavaScript 笔记(一)--基础中的基础 概要:javascript的组成. 各个组成部分的作用 . 一.javascript的组成   javascript   ECMASc ...

  5. 学unity3d需要什么基础

    学unity3d需要什么基础?在游戏业发展如火如荼的情境下,很多人开始转行投身于游戏程序开发,而unity3D游戏开发则是他们必须了解和会用的游戏开发工具.在学习之前又应该了解哪些内容呢? unity ...

  6. 2、JavaScript 基础二 (从零学习JavaScript)

     11.强制转换 强制转换主要指使用Number.String和Boolean三个构造函数,手动将各种类型的值,转换成数字.字符串或者布尔值. 1>Number强制转换 参数为原始类型值的转换规 ...

  7. 学hadoop需要什么基础

    最近一段时间一直在接触关于hadoop方面的内容,从刚接触时的一片空白,到现在也能够说清楚一些问题.这中间到底经历过什么只怕也就是只有经过的人才会体会到吧.前几天看到有个人问“学hadoop需要什么基 ...

  8. [区块链] 密码学中Hash算法(基础)

    在介绍Hash算法之前,先给大家来个数据结构中对hash表(散列表)的简单解释,然后我再逐步深入,讲解一下hash算法. 一.Hash原理——基础篇 1.1 概念 哈希表就是一种以 键-值(key-i ...

  9. Android版数据结构与算法(一):基础简介

    版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 一.前言 项目进入收尾阶段,忙忙碌碌将近一个多月吧,还好,不算太难,就是麻烦点. 数据结构与算法这个系列早就想写了,一是梳理总结,顺便逼迫自己把一 ...

  10. JVM垃圾回收(三)- GC算法:基础

    GC算法:基础 在介绍GC算法在实际场景中的实现之前,我们先定义一些必要的术语,以及GC算法的基本准则.具体的细节会因收集器的不同而稍有区别,但是基本上来说,所有的收集器会关注以下两个方面: 找出所有 ...

随机推荐

  1. Unity里vertexShader里压扁模型来实现比较low的阴影

    只有阴影pass,请自行合并,需要指定高度,忽略深度检测,需要控制好排序,或者去掉忽略,视情况而定,最后我觉得还是shadowmap好 Shader "Custom/MeshShadow&q ...

  2. 【cocos2d-x 手游研发小技巧(2)循环无限滚动的登陆背景】

    原创文章,转载请附上链接:http://www.cnblogs.com/zisou/p/cocos2d-xARPG6.html 首先让大家知道我们想要实现的最终效果是什么样的? 看一个<逆天仙魔 ...

  3. 为什么选择AJPFX

    外汇贵金属交易市场是全球最大的金融产品市场,日均交易量达到5万亿美元,相当于美国证券市场的40倍,中国股票市场日均交易量的700倍,它的主要优势在于其透明度较高,由于交易量巨大,主力资金(如政府外汇储 ...

  4. sql语句_2

    数据表如下 一个user_id对应多个user_name,现在要求是:如果某个用户对应的user_name中存在一个a,打印user_id,a出来:如果不存在,打印user_id,0.打印时候user ...

  5. ACTIVEMQ主题、队列设置用户名密码

    修改文件%ACTIVEMQ_BASE%/conf/activemq.xml,用户名密码储存在文件%ACTIVEMQ_BASE%/conf/credentials.properties中, active ...

  6. [JavaScript] 根据字符串宽度截取字符串

    /** * 根据字符串宽度截取字符串 * @param desc 原始字符串 * @param width 该显示的宽度 * @param fontsize 字体大小 12px * @returns ...

  7. Struts2中使用OGNL表达式语言访问静态方法和静态属性

    1.一定要在struts.xml配置文件中配置允许使用OGNL访问静态方法,否则不能使用OGNL访问静态方法 2.<s:property value="@com.gk.StaticTe ...

  8. vue-cli新建vue项目安装axios后在IE下报错

    使用脚手架新建了一个vue项目,可以在IE9+浏览器运行,但是在添加了axios后,在IE下就报错了 首先是安装axios,在命令行执行: $ npm install axios -s //执行命令, ...

  9. css实现响应式九宫格效果

    1. 首先看下九宫格的效果图: 2. html代码比较简单,如下: <div class="main"> <div class="box1"& ...

  10. MFC多线程技术

    MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没笑消息机制,通常用来执行后台计算和维护任务,如 ...