• 【算法】相关题目汇总(持续更新)


    余初学算法,题目较易,望诸大神指正而勿喷。

    一、将一个正整数分解质因数。例如:输入90,打印出打印出90=2*3*3*5。

            static void Main(string[] args)
            {
                //题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
                Console.WriteLine("Please input a number: ");
                string str = Console.ReadLine();
                int n = Convert.ToInt32(str);
                int i = 0;
                Console.Write("{0}=",n);//确保打印出"n=..."
                for (i = 2; i <= n; i++)
                {
                    while (n!=i)
                    {
                        if (n % i == 0)//说明此时i是n的一个质因数
                        {
                            Console.Write("{0}*", i);
                            n /= i;//将n整除i后的值继续赋给n,来寻找下一个质因数。如果不用整除后的值,则下一次能够整除得到的不是质因数。
                        }
                        else break;
                    }
                }
                Console.Write(n);
            }

    二、输入两个正整数m和n,求其最大公约数和最小公倍数。

    两种方案:1、欧几里德算法(辗转相除法);2、更相减损术

    static void Main(string[] args)
            {
                //题目:输入两个正整数,求其最大公约数和最小公倍数。
                Console.WriteLine("Please input two numbers: ");
                string str1 = Console.ReadLine();
                string str2 = Console.ReadLine();
                int a = Convert.ToInt32(str1);
                int b = Convert.ToInt32(str2);
                //辗转相除法(欧几里德算法)
    //概述:不断地用大数除以小数,直到两数可以整除,则最后的被除数就为最大公约数。
    if (a<b)//确保a是最大值 { int temp; temp = a; a = b; b = temp; } int m=a; int n=b; while (n!=0)//此时的n储存的是m除以n的余数,判断余数是否为0即判断n是否为0 { int r = m % n;//r即为m与n相除的余数 m = n;//将除数变为被除数 n = r;//将余数变为除数 } Console.WriteLine("The greatest common divisor is {0}",m); //最大公因数与最小公倍数的关系:两数乘积==最大公因数*最小公倍数。 Console.WriteLine("The least common multiple is {0}",a*b/m); //更相减损术 /*概述:第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。    第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等(两数 * 相等)为止。    则第一步中约掉的若干个2与第二步中等数(最终两数相等时的值)的乘积就是所求的最大公约数。*/ int ans = 1;//储存第一步中约掉的若干个2 int result = 0;//最终结果 if (a%2==0&&b%2==0) { while (a%2==0&&b%2==0) { a /= 2; b /= 2; ans *= 2; } } while (a!=b) { if (a > b) { a -= b; } else b -= a; } result = a * ans;//第一步中约掉的若干个2与第二步中等数(最终两数相等时的值)的乘积就是所求的最大公约数。 Console.WriteLine("The greatest common divisor is {0}", result); //最大公因数与最小公倍数的关系:两数乘积==最大公因数*最小公倍数。 Console.WriteLine("The least common multiple is {0}", a * b / result); } }

     三、求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时 共有5个数相加),几个数相加有键盘控制。

            static void Main(string[] args)
            {
                /*题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),
                几个数相加有键盘控制。*/
                string str1 = Console.ReadLine();
                string str2 = Console.ReadLine();
                int count = 1;
                int Tn = 0;
                int s = 0;
                int a = Convert.ToInt32(str1);
                int n = Convert.ToInt32(str2);
                
                while (count<=n)
                {
                    Tn += a;
                    s += Tn;//2+22+222+...
                    a *= 10;
                    count++;//最后数字个数即为循环次数
                }
                Console.WriteLine("a+aa+aaa+...={0}",s);
            }

    四、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

    static void Main(string[] args)
            {
                /*题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?*/
                int i, j, k;
                int count = 0;
                for (i = 1; i <=4; i++)
                {
                    for (j = 1; j <=4; j++)
                    {
                        for (k = 1; k <=4; k++)
                        {
                            if (i!=j&&j!=k&&i!=k)
                            {
                                Console.WriteLine("{0},{1},{2}",i,j,k);
                                Console.WriteLine("The number is{0}{1}{2}",i,j,k );
                                count++;
                            }
                        }
                    }
                }
                Console.WriteLine("The total is{0}.",count);
            }

    五、输出9*9口诀。

    static void Main(string[] args)
            {
                /*题目:输出9*9口诀。*/
                int i = 1;
                int j = 1;
                //方案一:
                for (i = 1; i <=9; i++)
                {
                    for (j = 1; j <=9; j++)
                    {
                        if (j <= i)
                        {
                            Console.Write("{0}*{1}={2}", i, j, i * j);
                            Console.Write(" ");
                        }
                        else
                            break;
                    }
                    Console.WriteLine();//换行
                }
                //方案二:对方案一的简化
                for (i = 1; i <= 9; i++)//控制行数
                {
                    for (j = 1; j <= i; j++) //控制列数
                    {
                        Console.Write("{0}*{1}={2}", i, j, i * j);
                        Console.Write(" ");
                    }
                    Console.WriteLine();//换行
                }
            }
  • 相关阅读:
    python os.path.dirname()
    python os.path.basename()方法
    python mmap对象
    python 读取二进制数据到可变缓冲区中
    sklearn常见分类器的效果比较
    用matplotlib获取雅虎股票数据并作图
    使用 lxml 中的 xpath 高效提取文本与标签属性值
    如何用 Python 爬取需要登录的网站
    python 线程及线程池
    使用Python代码处理Excel
  • 原文地址:https://www.cnblogs.com/GeekDragon/p/9845274.html
Copyright © 2020-2023  润新知