当前位置: 代码迷 >> C语言 >> [求助]一道简单的数学题
  详细解决方案

[求助]一道简单的数学题

热度:140   发布时间:2005-03-22 17:14:00.0
证明无解:
int s;
sum(int n){
if (n==1)return s+=5;
if (n==2)return s-=5;
if (n==3)return s*=5;
if (n==4)return s/=5;}
main(){int i,j,k,l,n1,n2,n3,n4;
for(i=1;j<5;i++){s=5;
n1=sum(i);
for(j=1;j<5;j++){if(i==j)break;s=n1;
n2=sum(j);
for(k=1;k<5;k++){if(i==k||k==j)break;s=n2;
n3=sum(k);
for(l=1;l<5;l++){if(i==l||j==l||k==l)break;s=n3;
n4=sum(l);
if(n4==24)printf("%d%d%d%d",i,j,k,l);}}}}}
如果要把其中所有的BREAK语句去掉就是(5*5*5-5)/5
----------------解决方案--------------------------------------------------------
第一个FOR中的J应为i
----------------解决方案--------------------------------------------------------
上面的程序有误改正如下:int s;
sum(int n){
if (n==1)return s+=5;
if (n==2)return s-=5;
if (n==3)return s*=5;
if (n==4)return s/=5;}
sum2(int x ,int n,int m){
if (x==1)return m+n;
if (x==2)return m-n;
if (x==3)return m*n;
if (x==4)return n/m;}
main(){int i,j,k,l,n1,n2,n3,n4,a=5,u=0;
for(i=1;i<5;i++){s=5;
n1=sum(i);
for(j=1;j<5;j++){if(i==j)continue;s=n1;
n2=sum(j);
for(k=1;k<5;k++){if(i==k||k==j)continue;s=n2;
n3=sum(k);
for(l=1;l<5;l++){if(i==l||j==l||k==l)continue;s=n3;
n4=sum(l);
if(n4==a)printf("%d%d%d%d%d\n",i,j,k,l,u);}}}}u=1;
for(i=1;i<5;i++){s=5;
n1=sum(i);
for(j=1;j<5;j++){if(i==j)continue;s=n1;
n2=sum(j);
for(k=1;k<5;k++){if(i==k||k==j)continue;s=5;
n3=sum(k);
for(l=1;l<5;l++){if(i==l||j==l||k==l||(l==4&&n3==0))continue;
n4=sum2(l,n2,n3);
if(n4==a)printf("%d%d%d%d%d\n",i,j,k,l,u);}}}}u=2;
for(i=1;i<5;i++){s=5;
n1=sum(i);
for(j=1;j<5;j++){if(i==j)continue;s=5;
n2=sum(j);
for(k=1;k<5;k++){if(i==k||k==j||(k==4&&n2==0))continue;
n3=sum2(k,n1,n2);
for(l=1;l<5;l++){if(i==l||j==l||k==l)continue;s=n3;
n4=sum(l);
if(n4==a)printf("%d%d%d%d%d\n",i,j,k,l,u);}}}}}
说明U代表括号的位置,0说明只有一个括号,1代表(5a5)b(5c5)d5
2代表(5ab5c5)d5
比如打出12342就代表(5+5)*(5-5)/5
这个程序可以成为一个通用程序。
----------------解决方案--------------------------------------------------------
2代表(5a5)b(5c5)d5
1代表(5ab5c5)d5
----------------解决方案--------------------------------------------------------
  相关解决方案