JavaSE基础与数学之美

这篇博客探讨了编程初期的学习挑战,并分享了在计算累加、阶乘等练习中体验到的数学之美。作者通过实例展示了如何使用数学公式简化编程问题,如利用高斯公式解决累加问题,以及探讨了阶乘、99乘法表和水仙花数的计算。文章强调编程中的算法和数学的简洁与优雅,提倡代码的美感和易读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

论程序算法与数学之美

                                                               ----------------------学习编程,最痛苦的莫过于开始的“原始资本”积累阶段。董老师说这段时间,必须每日五百行代码入账。

下面的都是练习题,不过本屌在其中体会到了一股浓厚的数学之美,真的,如果学数学的来搞编程,可能很多人要下岗了。

一、计算练习


1.计算累加

   1+2+3+4+...+99

 看到题目,立马笑了,因为想到了高斯公式:n*(n+1)/2

public int add(int n)
{
    return n*(n+1)/2;
}

但是,老师是要求我们循环的嘛!
public int add(int n)
	{
		int result = 0;
		for(int i =1;i<=n;i++)
		{
			result = result+i;
		}
		return result;
	}


   1+3+5+7+...+99

由于上面是高斯公式,所以又在想怎么用公式算出来,不过没想起来,结果自己算了一下:((n+1)/2)^2

public int add(int n )
{
  return (n+1)*(n+1)/4;
}
结果出来还合适,但是不适合推广。
经过上网查询,终于又找回了以前学过的等差数列的前n项和公式:n*(a1+an)/2或n*a1+n*(n-1)*d/2
public int add(int a1,int an,int n)
{
    return n*(a1+an)/2;
}

如果这样写,你发现n这个值不好算,那算了,还是要循环吧。

public int f(int n)
{
  int result=0;
  for(int i = 1;i<=n;)
  {
      result = result+i;
      i=i+2;
  }
  return result;
}

2.计算阶乘

    1!+2!+3!+4!+...+10!

     暂时最优的算法:

public int f(int n)
	{
		int result =0;
		int last =1;
		for(int i=1;i<=n;i++)
		{
			result = result+i*last;
			last = i*last;
		}
		return result;
	}
    递归方法():

       改良版:

public int f(int i)
	{
	    if(i==1)
		return 1;
	    else
		return i*f(i-1);
	}
public int jc(int n)
	{
	     int result = 0;
	     for(int i=1;i<=n;i++)
	     {
		result = result+f(i);
	     }
	     return result;
	}

     本屌的代码

      

public int f(int n)
	{
		int sum =1;
		for(;n>0;n--)
		{
			sum = sum*n;
		}
		return sum;
	}
public int jc(int n ) 
	{
		int result =0;
		for(;n>0;n--)
		{
			result=result+f(n);
		}
		return result;
	}

       

二、输出练习

     1.利用for循环打印出9*9乘法表

        更细的要求是输出三种乘法表:正方形、三角形、倒三角形

       昨晚在CentO鼓搞了一下,终于出了效果。

       

      效果挺美的,哈哈。代码如何:

      倒三角形:

       

for(int i=1;i<=9;i++)
	{
		for(int j=1;j<=(i-1)*8;j++)
		{
			System.out.print(" ");
		}
		for(int k=i;k<=9;k++)
		{
			System.out.print(i+"x"+k+"="+i*k+"\t");
		}
		System.out.println("");
	}

    三角形:

for(int i=1;i<=9;i++)
	{
		for(int j =1;j<=i;j++)
		{
			System.out.print(i+"x"+j+"="+i*j+"\t");
		}
		System.out.println("");
	}

   矩形:

for(int i = 1;i<=9;i++)
	{
		for(int j =1;j<=9;j++)
		{
			System.out.print(i+"x"+j+"="+i*j+"\t");
		}
		System.out.println("");
	}

     2.输出水仙花数

      要求:指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)

      只做了100-999的

int a,b,c;
    	for(int i =100;i<=999;i++)
    	{
    		a = i/100;
    		b = i%100/10;
    		c = i%100%10;
    		if((a*a*a+b*b*b+c*c*c)==i)
    		   System.out.println("the NumberOfDaffodils is:"+i);
    	}

      有兴趣可以一直做下去,参考百科——水仙花数

     3.找质数:

      明显,这是个数学问题,数学家去哪了?

     留个空白。

四、总结

         很多编程的问题,都是很美,尤其是算法什么,极具数学之简练,优美。编程的代码也可以像写诗一样,有押韵有结构,一目了然,阅读朗朗上口。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值