很简单的一题,先对5个数全排,然后对数之间加入+,-,*;
ac代码,用时2.412s
#include <iostream>
#include <cstring>
#include<cstdio>
#include<cstdlib>
#include <string>
#include<algorithm>
//#define MARK -2147483647
using namespace std;
int fuhao[]={1,2,3};int flag;int jf[6];
int shu[10];
void jisuan(int f)
{ int i;
if(f==4)
{ int shuu=shu[0];int shi=1;
for(i=0;i<4;++i)
{
switch(jf[i])
{
case 1: shuu*=shu[shi++];break;
case 2: shuu+=shu[shi++];break;
case 3: shuu-=shu[shi++];break;
}
}
if(shuu==23)flag=1;
return;
}
for(i=0;i<3;++i)
{
jf[f]=fuhao[i];
jisuan(f+1);
}return;
}
int main()
{
// freopen("in.txt","r",stdin);
int i;
while(scanf("%d%d%d%d%d",&shu[0],&shu[1],&shu[2],&shu[3],&shu[4]))
{ flag=0;
if(!shu[0]&&!shu[2]&&!shu[3]&&!shu[4]&&!shu[1])break;
sort(shu,shu+5);
do
{
jisuan(0);if(flag)break;
}while(next_permutation(shu,shu+5));
if(flag)printf("Possible\n");
else printf("Impossible\n");
}
return 0 ;
}
对上面代码进行改进,ac,用时0.319s,深刻认识到了代码简洁的重要性。
#include <iostream>
#include <cstring>
#include<cstdio>
#include<cstdlib>
#include <string>
#include<algorithm>
//#define MARK -2147483647
using namespace std;
int fuhao[]={1,2,3};int flag;int jf[6];
int shu[10];
//void jisuan(int f)
//{ int i;
// if(f==4)
// { int shuu=shu[0];int shi=1;
// for(i=0;i<4;++i)
// {
// switch(jf[i])
// {
// case 1: shuu*=shu[shi++];break;
// case 2: shuu+=shu[shi++];break;
// case 3: shuu-=shu[shi++];break;
// }
// }
// if(shuu==23)flag=1;
// return;
// }
// for(i=0;i<3;++i)
// {
// jf[f]=fuhao[i];
// jisuan(f+1);
// }return;
//}
void jisuan(int cur,int sum)
{
if(cur==5) {if(sum==23)flag=1;return; }
jisuan(cur+1,sum*shu[cur]);
if(flag)return;
jisuan(cur+1,sum+shu[cur]);
if(flag)return;
jisuan(cur+1,sum-shu[cur]);
if(flag)return;
return;
}
int main()
{
// freopen("in.txt","r",stdin);
int i;
while(scanf("%d%d%d%d%d",&shu[0],&shu[1],&shu[2],&shu[3],&shu[4]))
{ flag=0;
if(!shu[0]&&!shu[2]&&!shu[3]&&!shu[4]&&!shu[1])break;
sort(shu,shu+5);
do
{
jisuan(1,shu[0]);if(flag)break;
}while(next_permutation(shu,shu+5));
if(flag)printf("Possible\n");
else printf("Impossible\n");
}
return 0 ;
}