c语言解答过程如下:
#include <stdio.h>
int select(int a,int b){
switch(b){
case 2: return a/b;
case 3: return a*b;
case 5: return a-b;
case 7: return a+b;
}
return 0;
}
typedef struct element{
int id;
int parent;
int oper;
int stat;
int result;
struct element *next;
}node;
int* opers(int o,int s){
int ops[3]={0.0.0};
switch(o){
case 2: if(s==0){ops[0]=3;ops[1]=5;ops[2]=7;}else ops[0]=7;break;
case 3: if(s==0)ops[0]=5;else {ops[0]=2;ops[1]=5;ops[2]=7;}break;
case 5: if(s==0)ops[0]=3;else {ops[0]=2;ops[1]=3;ops[2]=7;}break;
case 7: if(s==0){ops[0]=2;ops[1]=3;ops[2]=5;}else ops[0]=2;break;
default: ops[0]=2;ops[1]=7;break;
}
return ops;
}
int setstat(int a,int ha,int hs){
int s=0;
switch(a){
case 2:if(ha==3||ha==5||(ha==7&&hs==0))s=1;break;
case 3:if(ha==5&&hs==0)s=1;break;
case 5:if(ha==3&&hs==0)s=1;break;
case 7:if(ha==3||ha==5||(ha==2&&hs==0))s=1;break;
}
return s;
}
int isout(node *p){
if(p==NULL)return 0;
return ((p->stat==0)&&(p->oper==3||p->oper==5));
}
node * searching(int a,int b){
node *head,*t,*p=(node *)malloc(sizeof(node));
int o,s;
p->id = 0;
p->parent = -1;
p->oper=0;
p->stat=0;
p->result=a;
p->next=NULL;
head=p;t=p;
int index=0;
while(t->result!=b||!isout(t)){
int *op=opers(t->oper,t->stat);
int a[3];a[0]=op[0];a[1]=op[1];a[2]=op[2];
int i=0;
for(i=0;i<3&&a[i];i++){
o = a[i]; if(o==2&&t->result%2!=0)continue;
s = setstat(o,t->oper,t->stat);
node * n =(node *)malloc(sizeof(node));
n->id = ++index;
n->parent = t->id;
n->oper=o;
n->stat=s;
n->result = select(t->result,o);
p->next=n;
p=p->next;
}
t=t->next;
}
t->next=NULL;
return head;
}
node * found(node * p,int b){
node *head=p,*t=p;
while(t!=NULL&&t->result!=b||!isout(t)) t=t->next;
head = t;t = p;head->next=NULL;
while(t!=NULL&&head->parent>=0){
while(t!=NULL&&head->parent!=t->id)t=t->next;
t->next=head;
head = t;
t=p;
}
return head;
}
print(int op){
switch(op){
case 2: printf("/2");break;
case 3: printf("*3");break;
case 5: printf("-5");break;
case 7: printf("+7");break;
}
}
int isnum(char* ns){
int i;
for(i=0;i<strlen(ns);i++)
if(ns[i]<'0'||ns[i]>'9')return 0;
return 1;
}
void main(int argc,char* argv[]){
int X=2011,Y=2012;
if(argc==3||argc==4){
if(!isnum(argv[1])){printf("Parameter 1 not correct!");return;}
if(!isnum(argv[2])){printf("Parameter 2 not correct!");return;}
X=atoi(argv[1]);Y=atoi(argv[2]);
}
node * p=found(searching(X,Y),Y);
if(argc==1||argc==3){
printf("%d=%d",Y,X);
while(p!=NULL){
print(p->oper);
p=p->next;
}
}
else if((argc==2&&!strcmp(argv[1],"-d"))||(argc==4&&!strcmp(argv[3],"-d"))){
printf("%d",p->result);
while(p!=NULL){
p=p->next;
if(p!=NULL){
print(p->oper);
printf("=%d",p->result);
}
}
}
else printf("Bad parameter!");
return;
}
运行结果: