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

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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
        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();//换行
            }
        }

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄