- 注册时间
- 2007-12-27
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 44743
- 在线时间
- 小时
|
发表于 2009-6-5 16:56:16
|
显示全部楼层
如果仅仅移动一个数字(可以变成指数)但是不允许移动任意操作符,或者丢弃一个数字,或者用一个数字覆盖另外一个数字,无解-
- // md.cpp : Defines the entry point for the console application.
- //
-
- #include "stdafx.h"
- #include <math.h>
-
- int d[8]={23,10,46,2,189,3,67,389};
- int e[8];
- int s[4]={0,0,10,100};
- void test_value()
- {
- if(e[3]==0)return;
- int s=e[0]*e[1]+e[2]/e[3]-(e[4]*e[5]+e[6])-e[7];
- if(s==0){
- printf("(%d*%d+%d/%d)-(%d*%d+%d)=%d\n",e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[6]);
- }
- }
-
- void try_insert_h(int h)
- {
- int i,j;
- test_value();
- for(i=0;i<8;i++){
- int olde=e[i];
- for(j=0;j<=3;j++){
- if(olde>=s[j]){
- switch(j){
- case 0:
- e[i]=olde*10+h;
- break;
- case 1:
- e[i]=(olde/10)*100+h*10+olde%10;
- break;
- case 2:
- e[i]=(olde/100)*1000+h*100+olde%100;
- break;
- case 3:
- e[i]=h*1000+olde;
- break;
- }
- test_value();
- }
- }
- for(j=0;j<=2;j++){
- if(olde>=s[j+1]){
- switch(j){
- case 0:
- e[i]=(olde/10)*10+h;
- break;
- case 1:
- e[i]=(olde/100)*100+h*10+olde%10;
- break;
- case 2:
- e[i]=h*100+olde%100;
- break;
- }
- test_value();
- }
- }
- double d=pow((double)olde,h);
- if(d<=100000.0){
- e[i]=(int)d;
- test_value();
- }
- e[i]=olde;
- }
- }
-
- void try_move_one_digit(int x)
- {
- int i,j,u,h;
- if(d[x]<100){
- u=2;
- }else{
- u=3;
- }
- for(i=0;i<u;i++){
- for(j=0;j<8;j++)e[j]=d[j];
- switch(i){
- case 0:
- h=d[x]%10;
- e[x]=d[x]/10;
- break;
- case 1:
- h=(d[x]/10)%10;
- e[x]=d[x]-h*10;
- break;
- case 2:
- h=d[x]/100;
- e[x]=d[x]%100;
- break;
- }
- try_insert_h(h);
- }
- }
-
- int _tmain(int argc, _TCHAR* argv[])
- {
- int i;
- for(i=0;i<8;i++){
- if(d[i]>=10){
- try_move_one_digit(i);
- }
- }
- return 0;
- }
复制代码 |
|