求解答:用3个5,与1个1,用+,—,*,/算出24?

freemansy 2001-10-04 06:22:35
...全文
901 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
blaster 2001-10-07
  • 打赏
  • 举报
回复
5*(5-1/5)=24
waltersure 2001-10-07
  • 打赏
  • 举报
回复
问一句多余的话,你们是现想出来的还是本来知道这个题目?若是后者,那把答案写出来也没什么意思。这个问题本来是小学时的一道数学竞赛题,考你是不是宥于常规思维。想不到和freemansy兄几乎同时问出这个问题。
boodweb 2001-10-06
  • 打赏
  • 举报
回复
方法可能拙劣了点
#include "stdio.h"
#include "stdlib.h"
static struct NUM
{int son;
int mum;
};
int sign;
struct NUM op(struct NUM num1,int opsign,struct NUM num2)
{
static struct NUM s;
switch(opsign){
case 0:s.mum=num1.mum*num2.mum;
s.son=num1.son*num2.mum+num1.mum*num2.son;
break;
case 1:s.mum=num1.mum*num2.mum;
s.son=num1.son*num2.mum-num1.mum*num2.son;
break;
case 2:s.mum=num1.mum*num2.mum;
s.son=num1.son*num2.son;
break;
case 3:if (num2.son!=0)
{s.mum=num1.mum*num2.son;
s.son=num1.son*num2.mum;}
else sign=-1;
}
return (s);
}
void main()
{
int op1,op2,op3,a,b,c,d;
struct NUM num[4];
char opsign[4]={"+-*/"};
printf(" **************-------24 POINT(a)-------**************\n");
printf("Please input four integers seperated with \",\":\n");
scanf("%d,%d,%d,%d",&(num[0].son),&(num[1].son),&(num[2].son),&(num[3].son));
for (a=0;a<=3;a++) num[a].mum=1;
for (a=0;a<=3;a++)
for (b=0;b<=3;b++)
{if (b==a) continue;//将四数排列
for (c=0;c<=3;c++)
{if (c==a || c==b) continue;
for (d=0;d<=3;d++)
{if (d==a || d==b || d==c) continue;
for (op1=0;op1<=3;op1++)//排列操作符
for (op2=0;op2<=3;op2++)
for (op3=0;op3<=3;op3++)
{if (op(op(op(num[a],op1,num[b]),op2,num[c]),op3,num[d]).mum*24==op(op(op(num[a],op1,num[b]),op2,num[c]),op3,num[d]).son && sign !=-1)
{printf("((%d %c %d) %c %d) %c %d=24\n",num[a].son,opsign[op1],num[b].son,opsign[op2],num[c].son,opsign[op3],num[d].son);
printf("%d,%d,%d,%d,%d,%d,%d\n",a,b,c,d,op1,op2,op3);
exit(0);}
sign=0;
if (op(op(num[a],op1,num[b]),op2,op(num[c],op3,num[d])).mum*24==op(op(num[a],op1,num[b]),op2,op(num[c],op3,num[d])).son && sign !=-1)
{printf("(%d %c %d) %c (%d %c %d)=24\n",num[a].son,opsign[op1],num[b].son,opsign[op2],num[c].son,opsign[op3],num[d].son);
printf("%d,%d,%d,%d,%d,%d,%d\n",a,b,c,d,op1,op2,op3);
exit(0);}
sign=0;
if (op(op(num[a],op1,op(num[b],op2,num[c])),op3,num[d]).mum*24==op(op(num[a],op1,op(num[b],op2,num[c])),op3,num[d]).son && sign !=-1)
{printf("(%d %c (%d %c %d)) %c %d=24\n",num[a].son,opsign[op1],num[b].son,opsign[op2],num[c].son,opsign[op3],num[d].son);
printf("%d,%d,%d,%d,%d,%d,%d\n",a,b,c,d,op1,op2,op3);
exit(0);}
sign=0;
if (op(num[a],op1,op(op(num[b],op2,num[c]),op3,num[d])).mum*24==op(num[a],op1,op(op(num[b],op2,num[c]),op3,num[d])).son && sign !=-1)
{printf("%d %c ((%d %c %d) %c %d)=24\n",num[a].son,opsign[op1],num[b].son,opsign[op2],num[c].son,opsign[op3],num[d].son);
printf("%d,%d,%d,%d,%d,%d,%d\n",a,b,c,d,op1,op2,op3);
exit(0);}
sign=0;
if (op(num[a],op1,op(num[b],op2,op(num[c],op3,num[d]))).mum*24==op(num[a],op1,op(num[b],op2,op(num[c],op3,num[d]))).son && sign !=-1)
{printf("%d %c (%d %c (%d %c %d))=24\n",num[a].son,opsign[op1],num[b].son,opsign[op2],num[c].son,opsign[op3],num[d].son);
printf("%d,%d,%d,%d,%d,%d,%d\n",a,b,c,d,op1,op2,op3);
exit(0);}
sign=0;
}
}
}
}
printf("No answer at all!\n");
}
widewave 2001-10-05
  • 打赏
  • 举报
回复
5*5-(1)5 = 24
stormywaters 2001-10-05
  • 打赏
  • 举报
回复
数字发生器是什么?
如果改成这样呢?

#include <stdio.h>

int comupte(int op,int i,int j) {
switch(op) {
case 0: return i+j;
case 1: return i-j;
case 2: return i*j;
case 3: return i/j;
}
}

char cvchar(int op) {
switch(op) {
case 0: return '+';
case 1: return '-';
case 2: return '*';
case 3: return '/';
}
}

void main() {
int a,b,c;
int op[4]={0,1,2,3};
int n[4];
printf("Enter 4 numbers: ");
for (a=0;a<4;a++)
scanf("%d",&n[a]);
for (a=0;a<4;a++)
for (b=0;b<4;b++)
for (c=0;c<4;c++) {
result=compute(op[c],compute(op[b],compute(op[a],n[1],n[2]),n[3]),n[4]);
if (result==24)
printf("((%d%c%d)%c%d)%c%d=24",n[1],cvchar(op[a]),n[2],cvchar(op[b]),n[3],cvchar(op[c]),n[4]);
}
}

Speedeer 2001-10-05
  • 打赏
  • 举报
回复
上面的c程序很有问题,他考虑的好象是5555的情况。而且不易推广。因为这个程序只能搜到数字固定的情况,解决方法可以在循环外再加一个数字发生器。
Arter 2001-10-04
  • 打赏
  • 举报
回复
很容易啦:
(5-1/5)*5=24
stormywaters 2001-10-04
  • 打赏
  • 举报
回复
#include <stdio.h>

int comupte(int op,int i,int j) {
switch(op) {
case 0: return i+j;
case 1: return i-j;
case 2: return i*j;
case 3: return i/j;
}
}

char cvchar(int op) {
switch(op) {
case 0: return '+';
case 1: return '-';
case 2: return '*';
case 3: return '/';
}
}

void main() {
int a,b,c;
int op[4]={0,1,2,3};
for (a=0;a<4;a++)
for (b=0;b<4;b++)
for (c=0;c<4;c++) {
result=compute(op[c],compute(op[b],compute(op[a],5,5),5),5);
if (result==24)
printf("((5%c5)%c5)%c5=24",cvchar(op[a]),cvchar(op[b]),cvchar(op[c]));
}
}

//就这样全部算一遍
//你自己试试吧
CForum 2001-10-04
  • 打赏
  • 举报
回复
给你思想吧:
1、做个寻环;
在()中代入数,在[]中代入算符;
()[]()[]()[]()[]()==24;
2、在数字外插入栝号,实验各种可能。
3、找到后输出各项。
CForum 2001-10-04
  • 打赏
  • 举报
回复
给你思想吧:
1、做个寻环;
在()中代入数,在[]中代入算符;
()[]()[]()[]()[]()==4;
2、在数字外插入栝号,实验各种可能。
3、找到后输出。
CForum 2001-10-04
  • 打赏
  • 举报
回复
明天给你答案。
SoftWare1999 2001-10-04
  • 打赏
  • 举报
回复
5*(5-1/5)

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧