|
发表于 2007-5-10 12:47:34
|
显示全部楼层
今天看精华,看到了这篇帖子, 找出了以前写的算 24 的程序:- #include <stdio.h>
- void get_arr(int arr[][4], int numbers[], int len){
- int i,j,k=0;
- for(i=0;i<len;i++){
- for(j=i+1;j<len;j++){
- arr[k][0] = numbers[i];
- arr[k][1] = numbers[j];
- arr[k][2] = i;
- arr[k++][3] = j;
- }
- }
- }
- void fill_arr(int to[], int len, int from[], int i, int j){
- int _i,_j = 0;
- for(_i=0;_i<len;_i++){
- if(_i!=i && _i!=j)
- to[_j++] = from[_i];
- }
- }
- int calculate(int numbers[], int len, int sum){
- int i,arr[len*(len-1)/2][4];
- if(len==1){
- if(numbers[0]==sum)
- return 0;
- return 1;
- }
- get_arr(arr,numbers,len);
- for(i=0;i<len*(len-1);i++){
- int _numbers[len-1];
- fill_arr(_numbers,len,numbers,arr[i][2],arr[i][3]);
- _numbers[len-2] = arr[i][0]+arr[i][1];
- if(!calculate(_numbers,len-1,sum)){
- printf("%d + %d = %d\n",arr[i][0],arr[i][1],arr[i][0]+arr[i][1]);
- return 0;
- }
- _numbers[len-2] = arr[i][0]-arr[i][1];
- if(_numbers[len-2]>0){
- if(!calculate(_numbers,len-1,sum)){
- printf("%d - %d = %d\n",arr[i][0],arr[i][1],arr[i][0]-arr[i][1]);
- return 0;
- }
- }else{
- _numbers[len-2] = -_numbers[len-2];
- if(_numbers[len-2]>0){
- if(!calculate(_numbers,len-1,sum)){
- printf("%d - %d = %d\n",arr[i][0],arr[i][1],arr[i][0]-arr[i][1]);
- return 0;
- }
- }else{
- _numbers[len-2] = -_numbers[len-2];
- if(!calculate(_numbers,len-1,sum)){
- printf("%d - %d = %d\n",arr[i][1],arr[i][0],arr[i][1]-arr[i][0]);
- return 0;
- }
- }
- _numbers[len-2] = arr[i][0]*arr[i][1];
- if(!calculate(_numbers,len-1,sum)){
- printf("%d * %d = %d\n",arr[i][0],arr[i][1],arr[i][0]*arr[i][1]);
- return 0;
- }
- if(arr[i][0] && !(arr[i][1]%arr[i][0])){
- _numbers[len-2] = arr[i][1]/arr[i][0];
- if(!calculate(_numbers,len-1,sum)){
- printf("%d / %d = %d\n",arr[i][1],arr[i][0],arr[i][1]/arr[i][0]);
- return 0;
- }
- }
- if(arr[i][1] && !(arr[i][0]%arr[i][1])){
- _numbers[len-2] = arr[i][0]/arr[i][1];
- if(!calculate(_numbers,len-1,sum)){
- printf("%d / %d = %d\n",arr[i][0],arr[i][1],arr[i][0]/arr[i][1]);
- return 0;
- }
- }
- }
- return 1;
- }
- int main(){
- int numbers[] = {3,2,6,4};
- calculate(numbers,4,24);
- return 0;
- }
复制代码 |
|