算法分析
1. 利用随机函数rand()生成1-13的四位随机整数。
2. 定义calc_sign()函数,用来进行运算符的表示。
3. 遍历所有运算结果。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
int calc_sign(int a1, int a2, int b)
{
switch (b)
{
default:
case 0: return (a1+a2);
case 1: return (a1-a2);
case 2: return (a1*a2);
case 3: if (a2!=0) return (a1/a2); else return 0;
}
}
#define MAX 10
void calc_24point()
{
int num[4];
char sign[5]="+-*/";
int i,j,k,l;
int n,m,r;
int tem1,tem2,tem3;
srand( (unsigned)time(0));
num[0] = 1+rand()%13;
num[1] = 1+rand()%13;
num[2] = 1+rand()%13;
num[3] = 1+rand()%13;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(j==i)
continue;
for(k=0;k<4;k++)
{
if(k==i || k==j)
continue;
for(l=0;l<4;l++)
{
if(l==i || l==j || l==k)
continue;
for(n=0;n<4;n++)
{
for(m=0;m<4;m++)
{
for(r=0;r<4;r++)
{
tem1=calc_sign(num[i],num[j],n);
tem2=calc_sign(tem1,num[k],m);
tem3=calc_sign(tem2,num[l],r);
if(tem3==24)
printf("{(%d%c%d)%c%d}%c%d=24\n",num[i],sign[n],num[j],sign[m],num[k],sign[r],num[l]);
else if(tem3==-24)
printf("{%d%c(%d%c%d)}%c%d=24\n",num[k],sign[m],num[i],sign[n],num[j],sign[r],num[l]);
else
{
tem1=calc_sign(num[i],num[j],n);
tem2=calc_sign(num[k],num[l],r);
tem3=calc_sign(tem1,tem2,m);
if(tem3==24.0)
printf("(%d%c%d)%c(%d%c%d)=24\n",num[i],sign[n],num[j],sign[m],num[k],sign[r],num[l]);
}
}
}
}
}
}
}
}
}
int main()
{
while(1)
{
calc_24point();
printf("0键返回,任意键继续\n");
if(getchar() != '0') continue;
else break;
}
return 0;
}
4. 若输出结果为24则printf表达式。
5. 任意键返回步骤1,继续操作,遇0则退出。
6. 程序流程图: