社区
数据结构与算法
帖子详情
谁能搞定扑克24点的问题?或提供思路!
jiyifi
2002-03-24 09:07:45
谁能搞定扑克24点的问题?
...全文
33
6
打赏
收藏
谁能搞定扑克24点的问题?或提供思路!
谁能搞定扑克24点的问题?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ndsm
2002-03-30
打赏
举报
回复
我说一句gois(gois) 不要生气:
3,7,9,7你的程序就不会算了,希望你再改一下
jiyifi
2002-03-30
打赏
举报
回复
gois(gois) 的代码要做一些改进要好点,还是很谢谢你 :)
goddamnit
2002-03-25
打赏
举报
回复
请问一下楼上的大哥:那个itoa是什么函数,是包含在那个头文件里的。请稍作解释,谢谢!!
LeeMaRS
2002-03-24
打赏
举报
回复
呵呵.海星同志这个代码抢了不少分了.^^
starfish
2002-03-24
打赏
举报
回复
嘿嘿,不好意思,偶要和你抢分:)
算法思路是:每次从剩余的数中取出两个合并(可以用加减乘除四种方式和并),然后在剩下的数中再取两个再合并,……如此反复,直到所有的数都被取尽。
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
const double PRECISION = 1E-6;
const int COUNT_OF_NUMBER = 4;
const int NUMBER_TO_BE_CAL = 24;
double number[COUNT_OF_NUMBER];
string expression[COUNT_OF_NUMBER];
bool Search(int n)
{
if (n == 1) {
if ( fabs(number[0] - NUMBER_TO_BE_CAL) < PRECISION ) {
cout << expression[0] << endl;
return true;
} else {
return false;
}
}
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
double a, b;
string expa, expb;
a = number[i];
b = number[j];
number[j] = number[n - 1];
expa = expression[i];
expb = expression[j];
expression[j] = expression[n - 1];
expression[i] = '(' + expa + '+' + expb + ')';
number[i] = a + b;
if ( Search(n - 1) ) return true;
expression[i] = '(' + expa + '-' + expb + ')';
number[i] = a - b;
if ( Search(n - 1) ) return true;
expression[i] = '(' + expb + '-' + expa + ')';
number[i] = b - a;
if ( Search(n - 1) ) return true;
expression[i] = '(' + expa + '*' + expb + ')';
number[i] = a * b;
if ( Search(n - 1) ) return true;
if (b != 0) {
expression[i] = '(' + expa + '/' + expb + ')';
number[i] = a / b;
if ( Search(n - 1) ) return true;
}
if (a != 0) {
expression[i] = '(' + expb + '/' + expa + ')';
number[i] = b / a;
if ( Search(n - 1) ) return true;
}
number[i] = a;
number[j] = b;
expression[i] = expa;
expression[j] = expb;
}
}
return false;
}
void main()
{
for (int i = 0; i < COUNT_OF_NUMBER; i++) {
char buffer[20];
int x;
cin >> x;
number[i] = x;
itoa(x, buffer, 10);
expression[i] = buffer;
}
if ( Search(COUNT_OF_NUMBER) ) {
cout << "Success." << endl;
} else {
cout << "Fail." << endl;
}
}
gois
2002-03-24
打赏
举报
回复
这个100分我拿定了,以下是我的源代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#define LYF 10E+8
void getprintnumber(float f[]){
int i;
time_t t;
srand((unsigned)time(&t));
for(i=0;i<4;i++){
f[i]=(float)(rand()%10);
if(f[i]==0.0)
f[i]=10.0;
printf("%d ",(int)f[i]);
}
}
float opt(float a,float b,int operate){
switch(operate){
case 0:
return a+b;
case 1:
return a-b;
case 2:
return a*b;
case 3:
return b==0.0?LYF:a/b;
}
}
void judge(float f[]){
float a,b,c,d;
char s[]={'+','-','*','/'};
int i,j1,j2,j3;
int g[]={0,1,2,3,0,1,3,2,0,2,1,3,0,2,3,1,0,3,1,2,0,3,2,1,
1,0,2,3,1,0,3,2,1,2,0,3,1,2,3,0,1,3,0,2,1,3,2,0,
2,0,1,3,2,0,3,1,2,1,0,3,2,1,3,0,2,3,0,1,2,3,1,0,
3,0,1,2,3,0,2,1,3,1,0,2,3,1,2,0,3,2,0,1,3,2,1,0};
putchar(10);
for(i=0;i<24;i++){
a=f[g[4*i]];
b=f[g[4*i+1]];
c=f[g[4*i+2]];
d=f[g[4*i+3]];
for(j1=0;j1<4;j1++)
for(j2=0;j2<4;j2++)
for(j3=0;j3<4;j3++)
if(fabs(opt(opt(opt(a,b,j1),c,j2),d,j3)-24)<10.0/LYF){
if(j3==0||j3==1){
printf("(%d%c%d)%c%d%c%d=24\n\t\tOK.",
(int)a,s[j1],(int)b,s[j2],(int)c,s[j3],(int)d);
exit(0);
}
if(j1==2||j1==3){
printf("(%d%c%d%c%d)%c%d=24\n\t\tOK.",
(int)a,s[j1],(int)b,s[j2],(int)c,s[j3],(int)d);
exit(0);
}
else{
printf("((%d%c%d)%c%d)%c%d=24\n\t\tOK.",
(int)a,s[j1],(int)b,s[j2],(int)c,s[j3],(int)d);
exit(0);
}
}
else
if(fabs(opt(opt(a,b,j1),opt(c,d,j2),j3)-24)<10.0/LYF){
if((j3==0||j3==1)&&(j1==2||j1==3)&&(j2==2||j2==3)){
printf("%d%c%d%c%d%c%d=24\n\t\tOK.",
(int)a,s[j1],(int)b,s[j3],(int)c,s[j2],(int)d);
exit(0);
}
else{
printf("(%d%c%d)%c(%d%c%d)=24\n\t\tOK.",
(int)a,s[j1],(int)b,s[j3],(int)c,s[j2],(int)d);
exit(0);
}
}
}
printf("\t\tNo solution!");
}
main(){
float f[4];
getprintnumber(f);
printf("\nPress Enter key to continue...");
getchar();
judge(f);
}
给分吧,上帝!
扑克
牌
问题
一个属性达标的条件是这个属性在三张
扑克
中全一样,或全不一样挑选的三张
扑克
达标的要求是每种属性都满足上面的条件比如第一张第一个属性为"A"、第二张第一个属性为"C"、第三张第一个属性为"B",全不一样。...
解决
问题
的
思路
beta
最近,在波利亚GG的谆谆教诲下,在pongba同学的循循善诱下,在TopLanguage的今天我们思考系列的热情引导下,我终于痛下决心开始琢磨所谓的科学思考
问题
的方法。对大部分人而言,解题不是终极目的,只是希望在解题中...
45岁码农用不到2年时间撸出100款
扑克
游戏
扑克
的玩法非常多,常见的就有斗地主、跑得快、五十K、锄大地、梭哈、十点半、二十一点、打千分、升级、拖拉机、双扣、保皇、斗牛、挖坑等等。在国内的不同地方,同类游戏的玩法也有不同讲究。粗略估计,国内的
扑克
...
对称、群论与魔术(六)——经典魔术《对称找牌》
相关内容请戳:对称、群论与魔术(五)——真实
扑克
牌图案的对称性探索对称、群论与魔术(四)——空白
扑克
卡片的对称性研究对称、群论与魔术(三)——常见的几何对称性简介对称、群论与魔术(二)——用群来描述...
常见智力
问题
及回答
思路
第二题:烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢? 解题
思路
:215049548烧一根这样的绳,从头烧到尾1个小时。由此可知,头尾同时烧...
数据结构与算法
33,006
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章