资源简介
一个关于如何计算出给定4个数得到24点的算法,在代码中我给了详细的注释,没用的什么复杂的算法和数据结构,尤其适合那些看不懂网上其他人代码的人,还有那些基础不好的同学,超简单,但是功能还算可以,基本上把每种可能都包含进去了
代码片段和文件信息
#include “stdio.h“
main()
{
float a[4]; //存放数字的
char b[4]; //存放运算符的
int c[1+4]; //输出时将float转换为int
b[0]=‘+‘;
b[1]=‘-‘;
b[2]=‘*‘;
b[3]=‘/‘;
int q=0;
float record1record2record3;
int number1number2number3number4;
int operat1operat2operat3;
float result; //计算没有括号和有一个括号的情况
float result1result2;//计算有两个括号的情况
printf(“请输入4个数字:\n“);
scanf(“%f %f %f %f“&a[0]&a[1]&a[2]&a[3]);
/*
先考虑没有括号和有一个括号的情况
*/
for(number1=0;number1<4;number1++) //排列第一个数
{
result=a[number1];
record1=result;
for(operat1=0;operat1<4;operat1++) //第一个运算符
{
for(number2=0;number2<4;number2++)//第二个数
{
result=record1;
if(number2!=number1)
{
if(operat1==0)
{result+=a[number2];}
if(operat1==1)
{result-=a[number2];}
if(operat1==2)
{result*=a[number2];}
if(operat1==3)
{result/=a[number2];}
record2=result;
for(operat2=0;operat2<4;operat2++) //第二个运算符
{
for(number3=0;number3<4;number3++) //第三个数
{
result=record2;
if(number1!=number2&&number2!=number3&&number1!=number3)
{
if(operat2==0)
{
result+=a[number3];
}
if(operat2==1)
{
result-=a[number3];
}
if(operat2==2)
{
result*=a[number3];
}
if(operat2==3)
{result/=a[number3];}
record3=result;
for(operat3=0;operat3<4;operat3++) //第三个运算符
{
for(number4=0;number4<4;number4++)//第四个数
{
result=record3;
if(number1!=number2&&number2!=number3&&number3!=number4&&
number1!=number3&&number1!=number4&&number2!=number4)
{
if(operat3==0)
{result+=a[number4];}
if(operat3==1)
{result-=a[number4];}
if(operat3==2)
{result*=a[number4];}
if(operat3==3)
{result=result/a[number4];}
if(result==24)
{
c[1]=(int)a[number1]c[2]=(int)a[number2]c[3]=(int)a[number3]c[4]=(int)a[number4];
c[0]=(int)result;
printf(“((%d %c %d) %c %d) %c %d =%d %d\n“c[1]
b[operat1]c[2]b[operat2]c[3]b[operat3]c[4]c[0]q);
result=0;
q++;
}
}
}
}
}
}
}
}
}
}
}
printf(“********************************************\n“);
//此处开始计算有2个括号的情况,总共有C4_2*2*2*2*2=192种结
result=0;
q=0;
for(number1=0;number1<4;number1++) //排列第一个数
{
for(operat1=0;operat1<4;operat1++) //第一个运算符
{
for(number2=0;number2<4;number2++)//第二个数
{
if(number2!=number1)
{
if(operat1==0)
{result1=a[number1]+a[number2];}
if(operat1==1)
{result1=a[number1]-a[number2];}
if(operat1==2)
{result1=a[number1]*a[number2];}
if(operat1==3)
{result1=a[number
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4533 2013-04-02 01:18 24点游戏C语言版5\24点游戏.cpp
文件 3427 2013-03-31 00:48 24点游戏C语言版5\24点游戏.dsp
文件 541 2013-03-31 01:19 24点游戏C语言版5\24点游戏.dsw
文件 50176 2013-04-08 22:33 24点游戏C语言版5\24点游戏.ncb
文件 49664 2013-04-08 22:33 24点游戏C语言版5\24点游戏.opt
文件 764 2013-04-02 20:53 24点游戏C语言版5\24点游戏.plg
文件 208987 2013-04-02 20:53 24点游戏C语言版5\Debug\24点游戏.exe
文件 259136 2013-04-02 20:53 24点游戏C语言版5\Debug\24点游戏.ilk
文件 6096 2013-04-02 20:53 24点游戏C语言版5\Debug\24点游戏.obj
文件 213732 2013-04-02 01:18 24点游戏C语言版5\Debug\24点游戏.pch
文件 467968 2013-04-02 01:18 24点游戏C语言版5\Debug\24点游戏.pdb
文件 50176 2013-04-08 22:27 24点游戏C语言版5\Debug\vc60.idb
文件 53248 2013-04-02 01:18 24点游戏C语言版5\Debug\vc60.pdb
目录 0 2013-04-08 22:52 24点游戏C语言版5\Debug
目录 0 2013-04-08 22:52 24点游戏C语言版5
----------- --------- ---------- ----- ----
1368448 15
- 上一篇:QtQuick实现的涂鸦板
- 下一篇:Matlab的IIR滤波器设计C语言M语言
评论
共有 条评论