用c语言编写24点代码分析

来源:百度知道 编辑:UC知道 时间:2024/06/20 05:53:55
这是网上高手做的代码,这个算24点c程序是输入4个整数(1到10),输出是通过+ - * / ()这几种运算最终算出24。比如 输入2 2 1 8四个数,结果输出(2 +2-1)*8 = 24
代码正确,如下,我知道是用for语句嵌套循环,但还是看不太懂什么意思,特别是最后会有讨论—24,1/24和-1/24的几种情况,还有最后的else下面的情况又是什么?
请高手详细说明一下这个程序的思路和实现过程最好在程序上加上注释,最好有流程图(有这个代码的流程图的悬赏100),赏分80.
#include<stdio.h>
double fun(double a1,double a2,int b)
{switch(b)
{case 0:return (a1+a2);
case 1:return (a1-a2);
case 2:return (a1*a2);
case 3:return (a1/a2);
}
}
void main()
{int i,j,k,l,n,m,r,save[4];
double num[4]={1,1,1,1},tem1,tem2,tem3,abc=1111;
char sign[5]="+-*/";
printf("input 4 numbers:");
for(i=0;i<4;i++)
{scanf("%lf",num+i); save[i]=num[i];}
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(j!=i)
{for(k=0;k<4;k++)
if(k!=i&&k!=j)
{for(l=0;l<4;l++)
if(l!=i&&l!=j&&l!=k)
{for(n=0;n<4;n++)
for(m=0;m<4;m++)
for(r=0;r<4;r++)

#include<stdio.h>

double fun(double a1,double a2,int b) //用于尝试着计算的函数,b为运算控制
{
switch(b)
{
case 0:return (a1+a2);
case 1:return (a1-a2);
case 2:return (a1*a2);
case 3:return (a1/a2);
}
}

void main()
{
int i,j,k,l,n,m,r,save[4];
double num[4]={1,1,1,1},tem1,tem2,tem3,abc=1111;
char sign[5]="+-*/"; //打印时候用的符号,需要和fun函数里的顺序保持一致

printf("input 4 numbers:");
for(i=0;i<4;i++)
{
scanf("%lf",num+i); //输入数据
save[i]=num[i]; //保存原始数据
}

//下面程序的思想,就是利用穷举(其实就是使用的排列组合方法)来计算可能的组合。
//先把输入的4个数进行排列(前4个for语句就这个用途)
//再依次插入三个运算符(后3个for语句就这个用途)
//事实上,从这里看,这个程序是不怎样的。七层循环嵌套,这是编程的大忌。一般循环嵌套最好不要超过两层。
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(j!=i)
{
for(k=0;k<4;k++)
if(k!=i&&k!=j)
{
for(l=0;l<4;l++)
if(l!=i&&l!=j&&l!=k)
{
for(n=0;n&