4张纸加减乘除牌求24

昨天有个同学问我如何使用5,5,5,1这四个数加减乘除求出24,我想了很久才想出来答案。

还记得很久以前也玩过一个类似的游戏:翻出4张纸牌牌,用加减乘除求24。

对于这个问题,写了一个小程序解决:

程序如下:输入4个数和1个答案,给出运算的路径。

编程语言:C 环境:vs2012

运行结果如下:

关键流程如下:

1、求出把四张牌的24种排列顺序,

2、这24种排列中再更换中间的运算符的符号位置(4的3次方种情况)

3、以上每一种情况再对应4种括号位置:(‘.‘表示符号)

  1、(a.b).c).d  2、(a.(b.c).d  3、(a.b).(c.d)   4、a.(b.(c.d)

4、这个程序存在很多相同的情况,还有大量优化空间 比如a+b+c+d括号括哪都是一样,而且abcd位置怎么改变结果都是一样的

列出关键算法

1、递归求出全排列:

//lst[]:输入数据数组

//length:输入数据长度

//*buf:排列存放地址

2、输入数字与符号计算结果

//:a,b,c,d:输入四个待运算的浮点数

//symbol1,symbol2,symbol3:中间3个运算符的种类

//这一段程序对应上述第1种括号情况,第2-4种情况对应函数checking2-checking4

3、获得最终路径

//a、b、c、d表示4张牌的数字,sum表示结果(算24输入24)

//*result:输出队列的地址,每8个数为1组:1、其中一张牌的数字,2、符号,3、其中一张牌得数字,4、符号,5、其中一张牌得数字,6、符号,7、剩下一张牌得数字,8、括号的位置(对应上面提到的4种情况)

//返回:1运算成功,0:排列的数量多于data_perm的长度

程序清单:

#include <stdio.h>
#include <memory.h>
#define NUM 4
#define ENDFLAG 255

#define NUMOFRESEULT 600
unsigned char result[NUMOFRESEULT]={0};

//计算结果
float checking(float a,char symbol1,float b,char symbol2,float c,char symbol3,float d)
{

const char symbolBuf[NUM]={‘+‘,‘-‘,‘*‘,‘/‘};
float temp1;
float temp2;
float temp3;

if(symbol1==symbolBuf[0])
temp1=a+b;
else if(symbol1==symbolBuf[1])
temp1=a-b;
else if(symbol1==symbolBuf[2])
temp1=a*b;
else if(symbol1==symbolBuf[3])
temp1=a/b;

if(symbol2==symbolBuf[0])
temp2=temp1+c;
else if(symbol2==symbolBuf[1])
temp2=temp1-c;
else if(symbol2==symbolBuf[2])
temp2=temp1*c;
else if(symbol2==symbolBuf[3])
temp2=temp1/c;

if(symbol3==symbolBuf[0])
temp3=temp2+d;
else if(symbol3==symbolBuf[1])
temp3=temp2-d;
else if(symbol3==symbolBuf[2])
temp3=temp2*d;
else if(symbol3==symbolBuf[3])
temp3=temp2/d;

return temp3;
}
//先结合中间的计算结果
float checking_2(float a,char symbol1,float b,char symbol2,float c,char symbol3,float d)
{

const char symbolBuf[NUM]={‘+‘,‘-‘,‘*‘,‘/‘};
float temp1;
float temp2;
float temp3;

if(symbol2==symbolBuf[0])
temp1=b+c;
else if(symbol2==symbolBuf[1])
temp1=b-c;
else if(symbol2==symbolBuf[2])
temp1=b*c;
else if(symbol2==symbolBuf[3])
temp1=b/c;

if(symbol1==symbolBuf[0])
temp2=a+temp1;
else if(symbol1==symbolBuf[1])
temp2=a-temp1;
else if(symbol1==symbolBuf[2])
temp2=a*temp1;
else if(symbol1==symbolBuf[3])
temp2=a/temp1;

if(symbol3==symbolBuf[0])
temp3=temp2+d;
else if(symbol3==symbolBuf[1])
temp3=temp2-d;
else if(symbol3==symbolBuf[2])
temp3=temp2*d;
else if(symbol3==symbolBuf[3])
temp3=temp2/d;

return temp3;
}
//先结合后边的计算结果
float checking_3(float a,char symbol1,float b,char symbol2,float c,char symbol3,float d)
{

const char symbolBuf[NUM]={‘+‘,‘-‘,‘*‘,‘/‘};
float temp1;
float temp2;
float temp3;

if(symbol1==symbolBuf[0])
temp1=a+b;
else if(symbol1==symbolBuf[1])
temp1=a-b;
else if(symbol1==symbolBuf[2])
temp1=a*b;
else if(symbol1==symbolBuf[3])
temp1=a/b;

if(symbol3==symbolBuf[0])
temp2=c+d;
else if(symbol3==symbolBuf[1])
temp2=c-d;
else if(symbol3==symbolBuf[2])
temp2=c*d;
else if(symbol3==symbolBuf[3])
temp2=c/d;

if(symbol2==symbolBuf[0])
temp3=temp1+temp2;
else if(symbol2==symbolBuf[1])
temp3=temp1-temp2;
else if(symbol2==symbolBuf[2])
temp3=temp1*temp2;
else if(symbol2==symbolBuf[3])
temp3=temp1/temp2;

return temp3;

}
//结合后三个的计算结果
float checking_4(float a,char symbol1,float b,char symbol2,float c,char symbol3,float d)
{

const char symbolBuf[NUM]={‘+‘,‘-‘,‘*‘,‘/‘};
float temp1;
float temp2;
float temp3;

if(symbol3==symbolBuf[0])
temp1=c+d;
else if(symbol3==symbolBuf[1])
temp1=c-d;
else if(symbol3==symbolBuf[2])
temp1=c*d;
else if(symbol3==symbolBuf[3])
temp1=c/d;

if(symbol2==symbolBuf[0])
temp2=b+temp1;
else if(symbol2==symbolBuf[1])
temp2=b-temp1;
else if(symbol2==symbolBuf[2])
temp2=b*temp1;
else if(symbol2==symbolBuf[3])
temp2=b/temp1;

if(symbol1==symbolBuf[0])
temp3=a+temp2;
else if(symbol1==symbolBuf[1])
temp3=a-temp2;
else if(symbol1==symbolBuf[2])
temp3=a*temp2;
else if(symbol1==symbolBuf[3])
temp3=a/temp2;

return temp3;
}
//交换*a和*b
void swap(float *a,float *b)
{
float c;
c=*a;
*a=*b;
*b=c;
}

//求排列
void perm(float list[], int k, int m,float *buf,int *cnt)
{
int i;
if(k > m)
{
for(i = 0; i <= m; i++)
{
// printf("%d ", list[i]);
*(buf+(*cnt))=list[i];
(*cnt)++;
}
}
else
{
for(i = k; i <= m; i++)
{
swap(&list[k], &list[i]);
perm(list, k + 1, m,buf,cnt);
swap(&list[k], &list[i]);
}
}
}
//求全排
void Permutation(float list[], int length,float *buf)
{
int cnt=0;
perm(list,0,length-1,buf,&cnt);
}
//计算获得答案的算法
int cal_arithmetic(unsigned char *result,int a,int b,int c,int d,int sum)
{
float dataIn[4];
float data_perm[4*4*3*2*1];
int symbol[NUM]={‘+‘,‘-‘,‘*‘,‘/‘};

int i;
int j;
int k;
int cnt;
int cnt_result=0;

//求排列
dataIn[0]=a;
dataIn[1]=b;
dataIn[2]=c;
dataIn[3]=d;
Permutation(dataIn,4,data_perm);

for(i=0;i<NUM;i++)
{
for(j=0;j<NUM;j++)
{
for(k=0;k<NUM;k++)
{
for(cnt=0;cnt<24;cnt++)
{
if(checking(data_perm[4*cnt],symbol[i],data_perm[4*cnt+1],symbol[j],data_perm[4*cnt+2],symbol[k],data_perm[4*cnt+3])==(float)sum)
{
*(result+cnt_result)=(unsigned char)data_perm[4*cnt];
cnt_result++;
*(result+cnt_result)=symbol[i];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+1];
cnt_result++;
*(result+cnt_result)=symbol[j];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+2];
cnt_result++;
*(result+cnt_result)=symbol[k];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+3];
cnt_result++;
*(result+cnt_result)=0;
cnt_result++;
}
if(checking_2(data_perm[4*cnt],symbol[i],data_perm[4*cnt+1],symbol[j],data_perm[4*cnt+2],symbol[k],data_perm[4*cnt+3])==(float)sum)
{
*(result+cnt_result)=(unsigned char)data_perm[4*cnt];
cnt_result++;
*(result+cnt_result)=symbol[i];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+1];
cnt_result++;
*(result+cnt_result)=symbol[j];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+2];
cnt_result++;
*(result+cnt_result)=symbol[k];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+3];
cnt_result++;
*(result+cnt_result)=1;
cnt_result++;
}
if(checking_3(data_perm[4*cnt],symbol[i],data_perm[4*cnt+1],symbol[j],data_perm[4*cnt+2],symbol[k],data_perm[4*cnt+3])==(float)sum)
{
*(result+cnt_result)=(unsigned char)data_perm[4*cnt];
cnt_result++;
*(result+cnt_result)=symbol[i];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+1];
cnt_result++;
*(result+cnt_result)=symbol[j];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+2];
cnt_result++;
*(result+cnt_result)=symbol[k];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+3];
cnt_result++;
*(result+cnt_result)=2;
cnt_result++;
}
if(checking_4(data_perm[4*cnt],symbol[i],data_perm[4*cnt+1],symbol[j],data_perm[4*cnt+2],symbol[k],data_perm[4*cnt+3])==(float)sum)
{
*(result+cnt_result)=(unsigned char)data_perm[4*cnt];
cnt_result++;
*(result+cnt_result)=symbol[i];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+1];
cnt_result++;
*(result+cnt_result)=symbol[j];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+2];
cnt_result++;
*(result+cnt_result)=symbol[k];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+3];
cnt_result++;
*(result+cnt_result)=3;
cnt_result++;
}
}
}
}
}
*(result+cnt_result)=ENDFLAG;
return 0;

}

//获取数
void getdata(int *a,int *b,int *c,int *d,int *e)
{
printf("请输入A:");
scanf("%d",a);
printf("\r\n请输入B:");
scanf("%d",b);
printf("\r\n请输入C:");
scanf("%d",c);
printf("\r\n请输入D:");
scanf("%d",d);
printf("\r\n请输入要计算的答案:");
scanf("%d",e);
}
//输出数据
void printfdata(void)
{
int i=0;

printf("\r\n结果:");
while(result[i*8]!=ENDFLAG)
{
if(result[i*8+7]==0)
printf("(%d %c %d) %c %d) %c %d\r\n",result[i*8],result[i*8+1],result[i*8+2],result[i*8+3],result[i*8+4],result[i*8+5],result[i*8+6]);
else if(result[i*8+7]==1)
printf("(%d %c (%d %c %d)) %c %d\r\n",result[i*8],result[i*8+1],result[i*8+2],result[i*8+3],result[i*8+4],result[i*8+5],result[i*8+6]);
else if(result[i*8+7]==2)
printf("(%d %c %d) %c (%d %c %d)\r\n",result[i*8],result[i*8+1],result[i*8+2],result[i*8+3],result[i*8+4],result[i*8+5],result[i*8+6]);
else if(result[i*8+7]==3)
printf("%d %c (%d %c %d %c %d)\r\n",result[i*8],result[i*8+1],result[i*8+2],result[i*8+3],result[i*8+4],result[i*8+5],result[i*8+6]);
i++;
}
}

int main()
{
int input1,input2,input3,input4,input5;//获取4个输入和1个结果

while(1)
{
//清零输出数组和指针
memset((void*)result,0,NUMOFRESEULT*sizeof(result[0]));

//获取数据和答案
getdata(&input1,&input2,&input3,&input4,&input5);

//寻找算法
cal_arithmetic(result,input1,input2,input3,input4,input5);

//打印算法
printfdata();
}
}

昨天有个同学问我如何使用5,5,5,1这四个数加减乘除求出24,我想了很久才想出来答案。

还记得很久以前也玩过一个类似的游戏:翻出4张纸牌牌,用加减乘除求24。

对于这个问题,写了一个小程序解决:

程序如下:输入4个数和1个答案,给出运算的路径。

编程语言:C 环境:vs2012

运行结果如下:

关键流程如下:

1、求出把四张牌的24种排列顺序,

2、这24种排列中再更换中间的运算符的符号位置(4的3次方种情况)

3、以上每一种情况再对应4种括号位置:(‘.‘表示符号)

  1、(a.b).c).d  2、(a.(b.c).d  3、(a.b).(c.d)   4、a.(b.(c.d)

4、这个程序存在很多相同的情况,还有大量优化空间 比如a+b+c+d括号括哪都是一样,而且abcd位置怎么改变结果都是一样的

列出关键算法

1、递归求出排列:

//lst[]:输入数据数组

//length:输入数据长度

//*buf:排列存放地址

2、输入数字与符号计算结果

//:a,b,c,d:输入四个待运算的浮点数

//symbol1,symbol2,symbol3:中间3个运算符的种类

//这一段程序对应上述第1种括号情况,第2-4种情况对应函数checking2-checking4

3、’获得最终路径

//a、b、c、d表示4张牌的数字,sum表示结果(算24输入24)

//*result:输出队列的地址,每8个数为1组:1、其中一张牌的数字,2、符号,3、其中一张牌得数字,4、符号,5、其中一张牌得数字,6、符号,7、剩下一张牌得数字,8、括号的位置(对应上面提到的4种情况)

//返回:1运算成功,0:排列的数量多于data_perm的长度

程序清单:

#include <stdio.h>
#include <memory.h>
#define NUM 4
#define ENDFLAG 255

#define NUMOFRESEULT 600
unsigned char result[NUMOFRESEULT]={0};

//计算结果
float checking(float a,char symbol1,float b,char symbol2,float c,char symbol3,float d)
{

const char symbolBuf[NUM]={‘+‘,‘-‘,‘*‘,‘/‘};
float temp1;
float temp2;
float temp3;

if(symbol1==symbolBuf[0])
temp1=a+b;
else if(symbol1==symbolBuf[1])
temp1=a-b;
else if(symbol1==symbolBuf[2])
temp1=a*b;
else if(symbol1==symbolBuf[3])
temp1=a/b;

if(symbol2==symbolBuf[0])
temp2=temp1+c;
else if(symbol2==symbolBuf[1])
temp2=temp1-c;
else if(symbol2==symbolBuf[2])
temp2=temp1*c;
else if(symbol2==symbolBuf[3])
temp2=temp1/c;

if(symbol3==symbolBuf[0])
temp3=temp2+d;
else if(symbol3==symbolBuf[1])
temp3=temp2-d;
else if(symbol3==symbolBuf[2])
temp3=temp2*d;
else if(symbol3==symbolBuf[3])
temp3=temp2/d;

return temp3;
}
//先结合中间的计算结果
float checking_2(float a,char symbol1,float b,char symbol2,float c,char symbol3,float d)
{

const char symbolBuf[NUM]={‘+‘,‘-‘,‘*‘,‘/‘};
float temp1;
float temp2;
float temp3;

if(symbol2==symbolBuf[0])
temp1=b+c;
else if(symbol2==symbolBuf[1])
temp1=b-c;
else if(symbol2==symbolBuf[2])
temp1=b*c;
else if(symbol2==symbolBuf[3])
temp1=b/c;

if(symbol1==symbolBuf[0])
temp2=a+temp1;
else if(symbol1==symbolBuf[1])
temp2=a-temp1;
else if(symbol1==symbolBuf[2])
temp2=a*temp1;
else if(symbol1==symbolBuf[3])
temp2=a/temp1;

if(symbol3==symbolBuf[0])
temp3=temp2+d;
else if(symbol3==symbolBuf[1])
temp3=temp2-d;
else if(symbol3==symbolBuf[2])
temp3=temp2*d;
else if(symbol3==symbolBuf[3])
temp3=temp2/d;

return temp3;
}
//先结合后边的计算结果
float checking_3(float a,char symbol1,float b,char symbol2,float c,char symbol3,float d)
{

const char symbolBuf[NUM]={‘+‘,‘-‘,‘*‘,‘/‘};
float temp1;
float temp2;
float temp3;

if(symbol3==symbolBuf[0])
temp1=c+d;
else if(symbol3==symbolBuf[1])
temp1=c-d;
else if(symbol3==symbolBuf[2])
temp1=c*d;
else if(symbol3==symbolBuf[3])
temp1=c/d;

if(symbol1==symbolBuf[0])
temp2=a+b;
else if(symbol1==symbolBuf[1])
temp2=a-b;
else if(symbol1==symbolBuf[2])
temp2=a*b;
else if(symbol1==symbolBuf[3])
temp2=a/b;

if(symbol2==symbolBuf[0])
temp3=temp1+temp2;
else if(symbol2==symbolBuf[1])
temp3=temp1-temp2;
else if(symbol2==symbolBuf[2])
temp3=temp1*temp2;
else if(symbol2==symbolBuf[3])
temp3=temp1/temp2;

return temp3;
}
//结合后三个的计算结果
float checking_4(float a,char symbol1,float b,char symbol2,float c,char symbol3,float d)
{

const char symbolBuf[NUM]={‘+‘,‘-‘,‘*‘,‘/‘};
float temp1;
float temp2;
float temp3;

if(symbol3==symbolBuf[0])
temp1=c+d;
else if(symbol3==symbolBuf[1])
temp1=c-d;
else if(symbol3==symbolBuf[2])
temp1=c*d;
else if(symbol3==symbolBuf[3])
temp1=c/d;

if(symbol2==symbolBuf[0])
temp2=b+temp1;
else if(symbol2==symbolBuf[1])
temp2=b-temp1;
else if(symbol2==symbolBuf[2])
temp2=b*temp1;
else if(symbol2==symbolBuf[3])
temp2=b/temp1;

if(symbol1==symbolBuf[0])
temp3=a+temp2;
else if(symbol1==symbolBuf[1])
temp3=a-temp2;
else if(symbol1==symbolBuf[2])
temp3=a*temp2;
else if(symbol1==symbolBuf[3])
temp3=a/temp2;

return temp3;
}
//交换*a和*b
void swap(float *a,float *b)
{
float c;
c=*a;
*a=*b;
*b=c;
}

//求排列
void perm(float list[], int k, int m,float *buf,int *cnt) 

int i; 
if(k > m) 

for(i = 0; i <= m; i++) 
{
// printf("%d ", list[i]); 
*(buf+(*cnt))=list[i]; 
(*cnt)++;


else 

for(i = k; i <= m; i++) 

swap(&list[k], &list[i]); 
perm(list, k + 1, m,buf,cnt); 
swap(&list[k], &list[i]); 



//求全排
void Permutation(float list[], int length,float *buf)
{
int cnt=0;
perm(list,0,length-1,buf,&cnt);

//计算获得答案的算法
int cal_arithmetic(unsigned char *result,int a,int b,int c,int d,int sum)
{
float dataIn[4];
float data_perm[4*4*3*2*1];
int symbol[NUM]={‘+‘,‘-‘,‘*‘,‘/‘};

int i;
int j;
int k;
int cnt;
int cnt_result=0;

//求排列
dataIn[0]=a;
dataIn[1]=b;
dataIn[2]=c;
dataIn[3]=d;
Permutation(dataIn,4,data_perm);

for(i=0;i<NUM;i++)
{
for(j=0;j<NUM;j++)
{
for(k=0;k<NUM;k++)
{
for(cnt=0;cnt<24;cnt++)
{
if(checking(data_perm[4*cnt],symbol[i],data_perm[4*cnt+1],symbol[j],data_perm[4*cnt+2],symbol[k],data_perm[4*cnt+3])==(float)sum)
{
*(result+cnt_result)=(unsigned char)data_perm[4*cnt];
cnt_result++;
*(result+cnt_result)=symbol[i];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+1];
cnt_result++;
*(result+cnt_result)=symbol[j];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+2];
cnt_result++;
*(result+cnt_result)=symbol[k];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+3];
cnt_result++;
*(result+cnt_result)=0;
cnt_result++;
}
if(checking_2(data_perm[4*cnt],symbol[i],data_perm[4*cnt+1],symbol[j],data_perm[4*cnt+2],symbol[k],data_perm[4*cnt+3])==(float)sum)
{
*(result+cnt_result)=(unsigned char)data_perm[4*cnt];
cnt_result++;
*(result+cnt_result)=symbol[i];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+1];
cnt_result++;
*(result+cnt_result)=symbol[j];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+2];
cnt_result++;
*(result+cnt_result)=symbol[k];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+3];
cnt_result++;
*(result+cnt_result)=1;
cnt_result++;
}
if(checking_3(data_perm[4*cnt],symbol[i],data_perm[4*cnt+1],symbol[j],data_perm[4*cnt+2],symbol[k],data_perm[4*cnt+3])==(float)sum)
{
*(result+cnt_result)=(unsigned char)data_perm[4*cnt];
cnt_result++;
*(result+cnt_result)=symbol[i];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+1];
cnt_result++;
*(result+cnt_result)=symbol[j];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+2];
cnt_result++;
*(result+cnt_result)=symbol[k];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+3];
cnt_result++;
*(result+cnt_result)=2;
cnt_result++;
}
if(checking_4(data_perm[4*cnt],symbol[i],data_perm[4*cnt+1],symbol[j],data_perm[4*cnt+2],symbol[k],data_perm[4*cnt+3])==(float)sum)
{
*(result+cnt_result)=(unsigned char)data_perm[4*cnt];
cnt_result++;
*(result+cnt_result)=symbol[i];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+1];
cnt_result++;
*(result+cnt_result)=symbol[j];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+2];
cnt_result++;
*(result+cnt_result)=symbol[k];
cnt_result++;
*(result+cnt_result)=(unsigned char)data_perm[4*cnt+3];
cnt_result++;
*(result+cnt_result)=3;
cnt_result++;
}
}
}
}
}
*(result+cnt_result)=ENDFLAG;
return 0;

}

//获取数
void getdata(int *a,int *b,int *c,int *d,int *e)
{
printf("请输入A:");
scanf("%d",a);
printf("\r\n请输入B:");
scanf("%d",b);
printf("\r\n请输入C:");
scanf("%d",c);
printf("\r\n请输入D:");
scanf("%d",d);
printf("\r\n请输入要计算的答案:");
scanf("%d",e);
}
//输出数据
void printfdata(void)
{
int i=0;

printf("\r\n结果:");
while(result[i*8]!=ENDFLAG)
{
if(result[i*8+7]==0)
printf("(%d %c %d) %c %d) %c %d\r\n",result[i*8],result[i*8+1],result[i*8+2],result[i*8+3],result[i*8+4],result[i*8+5],result[i*8+6]);
else if(result[i*8+7]==1)
printf("(%d %c (%d %c %d)) %c %d\r\n",result[i*8],result[i*8+1],result[i*8+2],result[i*8+3],result[i*8+4],result[i*8+5],result[i*8+6]);
else if(result[i*8+7]==2)
printf("(%d %c %d) %c (%d %c %d)\r\n",result[i*8],result[i*8+1],result[i*8+2],result[i*8+3],result[i*8+4],result[i*8+5],result[i*8+6]);
else if(result[i*8+7]==3)
printf("%d %c (%d %c %d %c %d)\r\n",result[i*8],result[i*8+1],result[i*8+2],result[i*8+3],result[i*8+4],result[i*8+5],result[i*8+6]);
i++;
}
}

int main()
{
int input1,input2,input3,input4,input5;//获取4个输入和1个结果

while(1)
{
//清零输出数组和指针
memset((void*)result,0,NUMOFRESEULT*sizeof(result[0]));

//获取数据和答案
getdata(&input1,&input2,&input3,&input4,&input5);

//寻找算法
cal_arithmetic(result,input1,input2,input3,input4,input5);

//打印算法
printfdata();
}
}

时间: 2024-10-19 06:04:55

4张纸加减乘除牌求24的相关文章

题目一:一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?

//一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米 double a = 0.08; double h =0; int i=0; for(i=1;h<8848130;i++) { a=a*2; h=a+h; } System.out.println(i);

期权只是一张纸而已,但它的背后是心机

公众号粉丝对我来讲没意义,认为这是跟风营销的,现在你可以关掉窗口了 津津乐道播客 IT 方向的主播们有个比较私密的 Telegram 群,除了选题以外,大家经常会在上面交流一些不便于拿到外面讲的个人观点,所以群规是不准截图也不准外传.大概七月初的时候,有人在群里说,最近冯大辉的嘴越来越黑了,这样怕是要惹上些麻烦.群里从来不缺这种预言帝,所以大家哼哈一阵后,就把这件事情忘了.谁知话音未落,七月中旬就传出了大辉被离职的消息. 头一次见到大辉是在一个技术会议上,那时还是全民博客时代,经常读他的博客,知

root locus 徒手大致绘出根轨迹!一支笔,一张纸,足矣 自动控制原理

徒手绘制根轨迹 可以看出假设的系统传递函数如图中黄色公式部分 特征方程是(s^3+4*s^2+K*s+1) = 0: 绘制根轨迹的方法是 铺垫: 1) 先把所有和K有关的项合并成一大项K(s), (相当于提公因式K) 2)  接着把得到的式子除以不含K的项(如图中蓝色字体部分) 于是可以得到,这是变形后的特征方程 这个方程就变形为1+K * G(s) = 0 的形式了,很重要的铺垫 接着有几条规则需要注意 rule 1 和rule 2 Rule 1 看分子和分母谁的阶次高,把阶次高者的阶次标记为

现在建筑业必不可少的一样东西竟然是一张纸!!!

现在的社会,做什么事不需要一个证件的,读书要有学生证,开车要有驾驶证,上班得有毕业证,开房还要身份证.没有个证件你都不敢出门的,不要小看这几张纸的证件,要是没有他们,咱们什么都做不了也哪儿都去不了.就说开车吧,没有驾驶证的司机我们看的是挺多的,但是被警察叔叔们看到了,那就不得了了,见一个抓一个,这样还开什么车啊,还不如坐车安全:你没有驾驶证就说明考车没过关,你考车都没过关了,还敢上路随意开,谁敢坐啊!既然都敢上路开了,又何必怕考车呢,这个证件是咱们国家好方便管理,也是现在社会最看重的东西. 这其

任意1-10中的4个数字,使用加减乘除计算得出24结果的可能组合(java版),很多人小时候都玩过

目录 需求: 需求该如何分析呢,怎么划分成小需求呢? 如何把小需求编排成完整需求: 学有所得 学会分析需求,由哪些组成(规则,逻辑等); 能把的需求分解成很多子需求.或孙需求.或童孙需求,直到每个需求很清晰可实施地为止 学会把各种子孙需求,通过组合编排,最终成为一个完整的大需求解决方案 需求 需求:任意1-10中的4个数字,使用加减乘除计算得出24结果的可能组合:通过初步分析,我们可以得到如下规则: 规则:1.任意1-10中的4个数字: 2.使用加减乘除计算得出24; 3.在任何一次计算中不能出

把52张牌随机发给4个人,每人13张牌,求每人都得到1张“A”的概率

把问题简单化!不考虑花色,就看4个人,4张A的分法就可以了,因为所有牌都是等概率的,因此可以不考虑其他牌,只考虑A.假设所有A都是一样的:一个人拿4张A的:4种(每个人都是一种可能性)或者C(4,1)一个人三张,其他人一张:3*4=12种(C(4,1)*C(3,1),表示存在顺序,即3100和1300是两种不同的,或者C(4,2)*A(2,2))一个人两张,另一个人也两张:1+2+3=6种(C(4,1)*C(3,1),均分包含顺序,还要除以2,2200和2200是一种的,牌都是一样的)或者C(4

取牌求顺序数组

一副从1到n的牌,每次从牌顶取一张放桌子上,再取一张放牌堆底,直到牌堆没牌,最后桌子上底牌是从1到n有序,设计程序,输入n,输出牌堆到顺序数组. 解:"取一个1~n到数组.这里为了说明取n=5.按照题目中到规则变换,得到数组:[1 3 5 4 2],将该数组下标与值互换得到[1 5 2 4 3],即为答案.解释:[1 3 5 4 2]的意义是,经过变换,原数组中3号位置的数字现在2号槽,原数组中5号位置的数字现在3号槽...现在已知变换后的槽存放的是1~n,故只需将下标与值互换即可得到待求数组.

例题;假设一张纸厚度为0.001米,对折多少次高度可以超过珠峰高度(8848)米。一个篮球第二次弹起的高度是第一次弹起高度的2/3,问弹起n次以后的高度是多少。 主要学习for循环

对折纸的例题:            double houdu = 0.001;            for (int i = 1; 1==1; i++)            {                houdu = houdu + houdu;                Console.WriteLine("第"+i+"次对折后纸的厚度为"+houdu+"米" );                if (houdu >=8

【知识总结】多项式全家桶(一)(NTT、加减乘除和求逆)

我这种数学一窍不通的菜鸡终于开始学多项式全家桶了-- 必须要会的前置技能:FFT(不会?戳我:[知识总结]快速傅里叶变换(FFT)) 一.NTT 跟FFT功能差不多,只是把复数域变成了模域(计算复数系数多项式相乘变成计算在模意义下整数系数多项式相乘).你看FFT里的单位圆是循环的,模一个质数也是循环的嘛qwq.\(n\)次单位根\(w_n\)怎么搞?看这里:[BZOJ3328]PYXFIB(数学)(内含相关证明.只看与原根和单位根相关的内容即可.) 注意裸的NTT要求模数\(p\)存在原根并且\