right=right+w2;
else right=right+\
f=false; //右侧出现过数值,修改f标志位
break; }
switch //根据状态,修改表达式
{
case //状态-1:左侧,修改左侧表达式
left=left+\
break; case //状态1:右侧,修改右侧表达式
(a4)
-1:
1:
if(f) right=right+w1;
else right=right+\
f=false; //右侧出现过数值,修改f标志位
break; }
System.out.println(left+\ }
left=\ //下次循环,清空
right=\
(5)完整程序
现在我们就需要把刚才的程序进行组合,构成我们的完整程序:
public class ch2_7_3 {
/**
* @param args */
public static void main(String[] args) {
int weight1,weight2,weight3,weight4,d1,d2,d3,d4,x,flag; int w1=0,w2=0,w3=0,w4=0;
System.out.printf(\
for(weight1=1;weight1<=40;weight1++) //穷举
for(weight2=weight1+1;weight2<=40-weight1;weight2++)
//注意:内循环起始值为外循环值加1
for(weight3=weight2+1;weight3<=40-weight1-weight2; weight3++)
if((weight4=40-weight1-weight2-weight3)>=weight3) {
for(flag=1,x=1;x<41&&flag==1;x++)
//重物在天平左面,d的各种状态包括:-1:砝码在天平左面; 1:砝码在右面;0:不用该砝码
for(flag=0,d1=1;d1>-2;d1--) //三种状态都循环一遍
for(d2=1;d2>-2&&flag==0;d2--)
for(d3=1;d3>-2&&flag==0;d3--)
for(d4=1;d4>-2&&flag==0;d4--) //找到组合,修改标志
if(x==weight1*d1+weight2*d2+ weight3*d3+weight4*d4)
flag=1;
if(flag==1)//flag为1代表组合找到了,为0代表组合没找到
{
System.out.printf(\ w1=weight1; //找到组合,为下一步输出做准备 w2=weight2; w3=weight3; w4=weight4;
}
}
// System.out.printf(\
String left = \ //表达式初始化
//a1a2a3a4
for(int i=1;i<=40;i++) //循环40次,打印出每种情况
for(int a1=-1;a1<=1;a1++) //三种状态都循环一遍 for(int a2=-1;a2<=1;a2++)
for(int a3=-1;a3<=1;a3++)
for(int a4=-1;a4<=1;a4++) {
if(i==a1*w4+a2*w3+a3*w2+a4*w1) //如果相等,打印出结果 {
boolean f=true; //表达式右侧第一项标志 left=i+\ switch (a1){ //根据状态,修改表达式
case -1://状态-1:左侧,修改左侧表达式
left=left+\
break;
case 1: //状态1:右侧,修改右侧表达式
if(f) //如果是右侧第一项,数值前不用加“+”
right=right+w4;
else //如果不是右侧第一项前加“+”
right=right+\
f=false;
//右侧出现过数值,修改f标志位
break; }
(a2){ //根据状态,修改表达式
//状态-1:左侧,修改左侧表达式
left=left+\
数值 switch case -1:
, break;
case 1: //状态1:右侧,修改右侧表达式
// right=right+\
if(f) //如果是右侧第一项,数值前不用 加“+”
right=right+w3;
else
right=right+\
f=false;//右侧出现过数值,修改f标志位
break; }
(a3){//根据状态,修改表达式
//状态-1:左侧,修改左侧表达式
left=left+\
break;
//状态1:右侧,修改右侧表达式
if(f) //如果是右侧第一项,数值前不用加“+”
right=right+w2;
else
right=right+\
f=false;//右侧出现过数值,修改f标志位
break;
(a4){//根据状态,修改表达式
switch case -1: case 1: }
switch case -1:
//状态-1:左侧,修改左侧表达式
left=left+\
break;
case 1: //状态1:右侧,修改右侧表达式
if(f) //如果是右侧第一项,数值前不用 加“+”
right=right+w1;
else
right=right+\
f=false;//右侧出现过数值,修改f标志位
break;
} System.out.println(left+\
//输出表达式
}
left=\ //下次循环,清空
right=\ } } }
2.9 一维多项式计算 1.问题描述
对于一维多项式,就是包含一个变量的多项式,一个普遍的一维多项式示例如下: P(x)=an–1xn–1+an–2xn–2+?+a1x+a0
一维多项式求值就是对于上述多项式,计算在指定的x处的函数值。例如: