24点

double d[5],r[4][5]; 
bool found=false; 
ofstream out; 

void search(double *d,int n){ 
	// print(d,n); 
	double e[4]; 
	int i,j,m,t; //循环控制变量 
	double a,b; //选取运算的数值 
	if(n==1){ 
		if( (int)(d[1]-24)*10000==0 ){ 
			found=true; 
		} 
		return ; 
	} 
	for(i=1;i<=n-1&&found==false;i++){ 
		for(j=i+1;j<=n&&found==false;j++){ 
			a=d[i],b=d[j]; 
			if(a for(m=1,t=0;m<=n;m++){ 
				if(m!=i && m!= j ) 
					e[++t]=d[m]; 
			} 
			r[5-n][1]=a,r[5-n][3]=b,r[5-n][4]=-1; 
			for(m=1;m<=5;m++){ 
				switch(m){ 
					case 1:r[5-n][4]=a+b; break; 
					case 2:r[5-n][4]=a-b; break; 
					case 3:r[5-n][4]=a*b; break; 
					case 4:if(b)r[5-n][4]=a/b; break; 
					case 5:if(a)r[5-n][4]=b/a; break; 
				} 
				if(r[5-n][4]!=-1){ 
					r[5-n][2]=m; 
					e[++t]=r[5-n][4]; 
					search(e,n-1); 
					t--; 
				} 
			} 
		} 
	} 
}


你可能感兴趣的:(J#)