มีโจทย์ อยู่ว่า เลข 4 ตัวต่อไปนี้ ทำเป็น 24 ได้ป่าว และทำได้ยังไง ขึ้เกียจคิดจึงเขียนโปรแกรมหา พบว่าใช้งานได้ดีทีเดียว นะจ๊ะ
#include<stdio.h>
float sum(float,float,int);
int main()
{
float data[]={9.0,8.0,3.0,7.0};
int count;
int i,j,k,l,m,n;
int o,p,q;
int check[]={0,0,0,0};
printf("Please input number to calculate a,b,c,d:");
scanf("%f,%f,%f,%f",&data[0],&data[1],&data[2],&data[3]);
int op[]={'+','-','<em>','/'};
for(i=0;i<4;i++)
{
check[i]=1;
for(j=0;j<3;j++)
{
count = -1;
for(l=0;l<4;l++)
{
if(check[l]!=1)
{
count++;
}
if(count == j)
break;
}
check[l] = 1;
for(k=0;k<2;k++)
{
count = -1;
for(m=0;m<4;m++)
{
if(check[m]!=1)
{
count++;
}
if(count == k)
break;
}
check[m] = 1;
count = -1;
for(n=0;n<4;n++)
{
if(check[n]!=1)
{
for(o=0;o<4;o++)
{
for(p=0;p<4;p++)
{
for(q=0;q<4;q++)
{
if(sum(sum(data[i],data[l],op[o]),sum(data[m],data[n],op[p]),op[q])==24.0)
printf("(%.0f %c %.0f) %c (%.0f %c %.0f)\n",data[i],op[o],data[l],op[q],data[m],op[p],data[n]);
if(sum(sum(sum(data[i],data[l],op[o]),data[m],op[p]),data[n],op[q])==24.0)
printf("(((%.0f %c %.0f) %c %.0f) %c %.0f)\n",data[i],op[o],data[l],op[p],data[m],op[q],data[n]);
}
}
}
//printf("%d,%d,%d,%d\n",i,l,m,n);
}
}
check[m] = 0;
}
check[l] = 0;
}
check[i]=0;
}
getchar();
getchar();
getchar();
return 0;
}
float sum(float a,float b,int o)
{
if(o == '+')
return(a+b);
if(o == '-')
return(a-b);
if(o == '</em>')
return(a*b);
if(o == '/')
return(a/b);
}
float sum(float,float,int);
int main()
{
float data[]={9.0,8.0,3.0,7.0};
int count;
int i,j,k,l,m,n;
int o,p,q;
int check[]={0,0,0,0};
printf("Please input number to calculate a,b,c,d:");
scanf("%f,%f,%f,%f",&data[0],&data[1],&data[2],&data[3]);
int op[]={'+','-','<em>','/'};
for(i=0;i<4;i++)
{
check[i]=1;
for(j=0;j<3;j++)
{
count = -1;
for(l=0;l<4;l++)
{
if(check[l]!=1)
{
count++;
}
if(count == j)
break;
}
check[l] = 1;
for(k=0;k<2;k++)
{
count = -1;
for(m=0;m<4;m++)
{
if(check[m]!=1)
{
count++;
}
if(count == k)
break;
}
check[m] = 1;
count = -1;
for(n=0;n<4;n++)
{
if(check[n]!=1)
{
for(o=0;o<4;o++)
{
for(p=0;p<4;p++)
{
for(q=0;q<4;q++)
{
if(sum(sum(data[i],data[l],op[o]),sum(data[m],data[n],op[p]),op[q])==24.0)
printf("(%.0f %c %.0f) %c (%.0f %c %.0f)\n",data[i],op[o],data[l],op[q],data[m],op[p],data[n]);
if(sum(sum(sum(data[i],data[l],op[o]),data[m],op[p]),data[n],op[q])==24.0)
printf("(((%.0f %c %.0f) %c %.0f) %c %.0f)\n",data[i],op[o],data[l],op[p],data[m],op[q],data[n]);
}
}
}
//printf("%d,%d,%d,%d\n",i,l,m,n);
}
}
check[m] = 0;
}
check[l] = 0;
}
check[i]=0;
}
getchar();
getchar();
getchar();
return 0;
}
float sum(float a,float b,int o)
{
if(o == '+')
return(a+b);
if(o == '-')
return(a-b);
if(o == '</em>')
return(a*b);
if(o == '/')
return(a/b);
}
คิดว่าตัวโปรแกรมน่าจะรันได้กับทุกเครื่องนะ เพราะค่อนข้างเขียนเป็นมาตรฐาน เดียวค่อยมาอธิบายว่ามันทำงานไง
ตอนนี้พบแล้วว่าเขียนไม่ครบเคส ค่อยมาแก้นะ

