【Java与数学】如何确定(x+y+z)^11的展开式有多少项?
【数学思路】
这个问题乍一看不好解决,实际是等差数列的求和问题。
以某项Ax2y^6z^3为例,可以发现xyz的指数部分和是定值11;若x的指数是2,则y和z的指数和是11-2=9。
又以一项Bx8y^2z^1为例,可以发现y的指数受x的指数限制,当x的指数大时,y可取的范围就小;当x的指数小是,y的指数可取的范围就大;至于z的指数,直接等于11减去前两项的指数。
所以当x的指数为0时,y的指数有12种选择(0~11),z是被动跟y的指数跑的,整体就是12种选择;
x的指数为1时,y的指数有11种选择;
x的指数为2时,有的指数有10种选择;
x的指数为n时,y的指数有11-n+1种选择;
......
x的指数为11时,y的指数有1种选择,那就是0,同时z的指数也是0;
其总和Sum=12+10+9+......+1=12*(1+12)/2=6*13=78项。
另有一种说法是说组合数C_13_2也得78,组合里的2好理解,两个隔板分三份,但13怎么得来的呢?它和11间差的2怎么解释?说不通的话只能当拼凑出来的了。
【程序思路一】
把y的指数求和,结果就是项数,用一重循环就能解决问题。
代码:
int sum=0; for(int x=0;x<12;x++) { int y=11-x+1; sum+=y; } System.out.println("sum="+sum);
输出:
sum=78
【程序思路二】
若要输出每一项xyz的指数是几,那么就得用多重循环了。
代码:
int idx=0; for(int i=0;i<12;i++) { for(int j=0;j<12;j++) { for(int k=0;k<12;k++) { if((i+j+k)==11) { String s=String.format("%2d:x^%dy^%dz^%d", ++idx,i,j,k); System.out.println(s); } } } }
输出:
1:x^0y^0z^11 2:x^0y^1z^10 3:x^0y^2z^9 4:x^0y^3z^8 5:x^0y^4z^7 6:x^0y^5z^6 7:x^0y^6z^5 8:x^0y^7z^4 9:x^0y^8z^3 10:x^0y^9z^2 11:x^0y^10z^1 12:x^0y^11z^0 13:x^1y^0z^10 14:x^1y^1z^9 15:x^1y^2z^8 16:x^1y^3z^7 17:x^1y^4z^6 18:x^1y^5z^5 19:x^1y^6z^4 20:x^1y^7z^3 21:x^1y^8z^2 22:x^1y^9z^1 23:x^1y^10z^0 24:x^2y^0z^9 25:x^2y^1z^8 26:x^2y^2z^7 27:x^2y^3z^6 28:x^2y^4z^5 29:x^2y^5z^4 30:x^2y^6z^3 31:x^2y^7z^2 32:x^2y^8z^1 33:x^2y^9z^0 34:x^3y^0z^8 35:x^3y^1z^7 36:x^3y^2z^6 37:x^3y^3z^5 38:x^3y^4z^4 39:x^3y^5z^3 40:x^3y^6z^2 41:x^3y^7z^1 42:x^3y^8z^0 43:x^4y^0z^7 44:x^4y^1z^6 45:x^4y^2z^5 46:x^4y^3z^4 47:x^4y^4z^3 48:x^4y^5z^2 49:x^4y^6z^1 50:x^4y^7z^0 51:x^5y^0z^6 52:x^5y^1z^5 53:x^5y^2z^4 54:x^5y^3z^3 55:x^5y^4z^2 56:x^5y^5z^1 57:x^5y^6z^0 58:x^6y^0z^5 59:x^6y^1z^4 60:x^6y^2z^3 61:x^6y^3z^2 62:x^6y^4z^1 63:x^6y^5z^0 64:x^7y^0z^4 65:x^7y^1z^3 66:x^7y^2z^2 67:x^7y^3z^1 68:x^7y^4z^0 69:x^8y^0z^3 70:x^8y^1z^2 71:x^8y^2z^1 72:x^8y^3z^0 73:x^9y^0z^2 74:x^9y^1z^1 75:x^9y^2z^0 76:x^10y^0z^1 77:x^10y^1z^0 78:x^11y^0z^0
END