分桔子的问题
来源:百度知道 编辑:UC知道 时间:2024/06/19 03:42:42
#include<iostream>
using namespace std;
void main()
{
int i;
int j;
int iX[6];//六个孩子最初分到的桔子
memset(iX,0,sizeof(iX) );
int iSum[6];//六个孩子最后得到的桔子应该相等为2520/6
memset(iSum,0,sizeof(iSum) );
for (iX[0]=1;iX[0]<2520;iX[0]++)//老大的桔子的变化范围
{
for (iX[1]=1;iX[1]<2520;iX[1]++)//老二的桔子的变化范围
{
for (iX[2]=1;iX[2]<2520;iX[2]++)//老三的桔子的变化范围
{
for (iX[3]=1;iX[3]<2520;iX[3]++)//老四的桔子的变化范围
{
for (iX[4]=1;iX[4]<2520;iX[4]++)//老五的桔子的变化范围
{
for (iX[5]=1;iX[5]<2520;iX[5]++)//老六的桔子的变化范围
{
for (i=0;i<5;i++)
{
for (j=8;j>=1;j--)
{
if (
如果用数学方法推导,也不难:
int iX[6];//六个孩子最初分到的桔子
(iX[0]*1/8+iX[1])*6/7=PER;
((iX[0]*1/8+iX[1])*1/7+iX[2])*5/6=PER;
(((iX[0]*1/8+iX[1])*1/7+iX[2])*1/6+iX[3])*4/5=PER;
((((iX[0]*1/8+iX[1])*1/7+iX[2])*1/6+iX[3])*1/5+iX[4])*3/4=PER;
(((((iX[0]*1/8+iX[1])*1/7+iX[2])*1/6+iX[3])*1/5+iX[4])*1/4+iX[5])*2/3=PER;
(((((iX[0]*1/8+iX[1])*1/7+iX[2])*1/6+iX[3])*1/5+iX[4])*1/4+iX[5])*1/3+iX[0]*7/8=PER;
从最后两个式子往前推。由倒数第二式,可以得出:
(((((iX[0]*1/8+iX[1])*1/7+iX[2])*1/6+iX[3])*1/5+iX[4])*1/4+iX[5])=PER*3/2=630;
代入最后一式,可以求得iX[0]:
iX[0]=(PER-630*1/3)*8/7=(420-210)*8/7=240;
然后,再从第一个式子往后推:
iX[1]=PER*7/6-240*1/8=490-30=460;
iX[2]=PER*6/5-490*1/7=504-70=434;
iX[3]=PER*5/4-504*1/6=525-84=441;
iX[4]=PER*4/3-525*1/5=560-105=455;
iX[5]=PER*3/2-560*1/4=630-140=490;
我在你的程序基础上修改了一下:
#include<iostream>
using namespace std;
const int TOTAL=2520;
const int PER=T