递归法算24
2005-09-20 23:40
148 查看
/*************************************************/
/* 算24 */
/* 皮业勇 */
/* 2005.9.20 */
/* piyeyong@gmail.com */
/*************************************************/
#include<stdio.h>
#define N 4
#include<math.h>
float cun
[4];
/* 定义函数f,功能:对m和n进行四则运算,参数b代表四则运算法则(1~6) */
float f(int b,float m,float n)
{
float c;
if(b==1)
c=m+n;
else if(b==2)
c=m-n;
else if(b==3)
c=m*n;
else if (b==4&&n!=0)
c=m/n;
else if (b==5&&m!=0)
c=n/m;
else if(b==6)
c=n-m;
else
c=-10000;
return (c);
}
/* 定义函数pf,功能:输出,参数b代表四则运算规则(1~6) */
void pf(int b,float m,float n)
{if(b==1)
printf("%.3f+%.3f=%.3f/t",m,n,f(1,m,n));
else if(b==2)
printf("%.3f-%.3f=%.3f/t",m,n,f(2,m,n));
else if(b==3)
printf("%.3f*%.3f=%.3f/t",m,n,f(3,m,n));
else if(b==4&&n!=0)
printf("%.3f/%.3f=%.3f/t",m,n,f(4,m,n));
else if(b==5&&m!=0)
printf("%.3f/%.3f=%.3f/t",n,m,f(5,m,n));
else if(b==6&&m!=0)
printf("%.3f-%.3f=%.3f/t",n,m,f(6,m,n));
}
/* 打印结果 */
void print()
{
for(int i = 1; i < N; i ++)
pf(cun[i][1],cun[i][2],cun[i][3]);
putchar('/n');
}
/* 递归的计算,n表示要计算的数的个数,a数组中存放要计算的数 */
void work(float a[], int n)
{
float b[N+1];
int l, i; // i表示四则运算法则
if(n < 2)
printf("argument error/n");
if(n == 2) {
for(i = 1; i <= 6; i ++)
{
if( ((f(i, a[1], a[2]) - 24) < 0.0001) &&
((f(i, a[1], a[2]) - 24) > -0.0001 ) )
{
// 把本次计算式存入cun二维数组中
cun[N+1-n][1] = i;
cun[N+1-n][2] = a[1];
cun[N+1-n][3] = a[2];
print();
}
}
}
else {
// j,k两个循环表示本次运算a[j],a[k]两个数,运算规则是i(1~6)
for( int j = 1; j < n; j ++)
{
for( int k = j+1; k <= n; k ++)
{
for(i = 1; i <= 6; i ++)
{
// 把本次计算式存入cun二维数组中
cun[N+1-n][1] = i;
cun[N+1-n][2] = a[j];
cun[N+1-n][3] = a[k];
// 设置递归时用到的数组b
for(l = 1; l <=n; l ++)
b[l] = a[l];
b[j] = f(i, a[j], a[k]);
b[k] = a
;
work(b, n-1);
}
}
}
}
}
void main()
{
int i;
float a
;
for(i=1; i<=N; i++)
scanf("%f",&a[i]);
work(a, N);
return;
}
/* 算24 */
/* 皮业勇 */
/* 2005.9.20 */
/* piyeyong@gmail.com */
/*************************************************/
#include<stdio.h>
#define N 4
#include<math.h>
float cun
[4];
/* 定义函数f,功能:对m和n进行四则运算,参数b代表四则运算法则(1~6) */
float f(int b,float m,float n)
{
float c;
if(b==1)
c=m+n;
else if(b==2)
c=m-n;
else if(b==3)
c=m*n;
else if (b==4&&n!=0)
c=m/n;
else if (b==5&&m!=0)
c=n/m;
else if(b==6)
c=n-m;
else
c=-10000;
return (c);
}
/* 定义函数pf,功能:输出,参数b代表四则运算规则(1~6) */
void pf(int b,float m,float n)
{if(b==1)
printf("%.3f+%.3f=%.3f/t",m,n,f(1,m,n));
else if(b==2)
printf("%.3f-%.3f=%.3f/t",m,n,f(2,m,n));
else if(b==3)
printf("%.3f*%.3f=%.3f/t",m,n,f(3,m,n));
else if(b==4&&n!=0)
printf("%.3f/%.3f=%.3f/t",m,n,f(4,m,n));
else if(b==5&&m!=0)
printf("%.3f/%.3f=%.3f/t",n,m,f(5,m,n));
else if(b==6&&m!=0)
printf("%.3f-%.3f=%.3f/t",n,m,f(6,m,n));
}
/* 打印结果 */
void print()
{
for(int i = 1; i < N; i ++)
pf(cun[i][1],cun[i][2],cun[i][3]);
putchar('/n');
}
/* 递归的计算,n表示要计算的数的个数,a数组中存放要计算的数 */
void work(float a[], int n)
{
float b[N+1];
int l, i; // i表示四则运算法则
if(n < 2)
printf("argument error/n");
if(n == 2) {
for(i = 1; i <= 6; i ++)
{
if( ((f(i, a[1], a[2]) - 24) < 0.0001) &&
((f(i, a[1], a[2]) - 24) > -0.0001 ) )
{
// 把本次计算式存入cun二维数组中
cun[N+1-n][1] = i;
cun[N+1-n][2] = a[1];
cun[N+1-n][3] = a[2];
print();
}
}
}
else {
// j,k两个循环表示本次运算a[j],a[k]两个数,运算规则是i(1~6)
for( int j = 1; j < n; j ++)
{
for( int k = j+1; k <= n; k ++)
{
for(i = 1; i <= 6; i ++)
{
// 把本次计算式存入cun二维数组中
cun[N+1-n][1] = i;
cun[N+1-n][2] = a[j];
cun[N+1-n][3] = a[k];
// 设置递归时用到的数组b
for(l = 1; l <=n; l ++)
b[l] = a[l];
b[j] = f(i, a[j], a[k]);
b[k] = a
;
work(b, n-1);
}
}
}
}
}
void main()
{
int i;
float a
;
for(i=1; i<=N; i++)
scanf("%f",&a[i]);
work(a, N);
return;
}
相关文章推荐
- 24_普通工厂设计模式
- 从此不求人:自主研发一套PHP前端开发框架(24)
- 设计一个算法,把一个真分数表示为埃及分数之和的形式。所谓埃及分数是指分子为1的分数。如7、8=1/2+1/3+1/24。
- 利用sed把ip xxx.xxx.xxx.xxx转为xxx.xxx.xxx.0/24
- HM编码器代码阅读(24)——视频数据的熵编码
- 【剑指offer-Java版】24二叉搜索树后序遍历序列
- 项目24-深复制的体验
- 7.2趣味递归法若干问题
- Linux-09、10-如何选择合适的Linux系统版本学习&服务器领域如何选择适合的CentOS Linux版本(L003-23,24)
- vb24
- 前端切图之png8和png24的区别
- 魔术球问题[网络流24题之4]
- 最长递增子序列问题[网络流24题之6]
- linux基础(24)--磁盘配额--RHEL6.5
- leetcode 24. Swap Nodes in Pairs
- leetcode 24 Swap Nodes in Pairs C++
- javascript Date转化为24小时格式
- 手抄代码1-24
- 开源新闻速递:Fedora 24 第四次延迟发布
- 剑指offer(24)-字符串的排列