This is a training reference for the solution of small petition violence
Please poke http://luckycat.kshs.kh.edu.tw/
Thinking of solving problems
As the parentheses are determined, it is calculated one layer at a level.
Calculating intermediate results can be stored in another variable, so it's not too cumbersome to backtrack.
See Code
Code
#include <stdio.h>#include<string.h>//#define LOCALConst intMaxLen =5;BOOLUsed[maxlen], yes;intNumber[maxlen];CharOper[] = {'+','-','*'};voidSearch (intLeftintRes) { if(left==0&& res!= at)return ; Else if(left==0&& res== at) {yes=true;return ; } for(intI=0; i<maxlen; i++)if(!Used[i]) { for(intk=0; k<3; k++) { intMID =Res; Switch(Oper[k]) { Case '+': {mid+=number[i]; used[i]=true; Break; } Case '-': {mid-=number[i]; used[i]=true; Break; } Case '*': {mid*=number[i]; used[i]=true; Break; } default: Break; } Search ( left-1, mid); Used[i]=false; } }}intMain () {#ifdef LOCAL freopen ("Data.txt","R", stdin); Freopen ("Ans.txt","W", stdout); #endif BOOLFlag =true; for(intI=0; i<maxlen; i++) {scanf ("%d", &Number[i]); if(Number[i]! =0) flag =false; } while(!flag) { for(intI=0; i<maxlen&&!yes; i++) {Used[i]=true; Search (MaxLen-1, Number[i]); Used[i]=false; } if(yes) printf ("possible\n"); Elseprintf"impossible\n"); Flag=true; for(intI=0; i<maxlen; i++) {scanf ("%d", &Number[i]); if(Number[i]! =0) flag =false; } memset (Used,0,sizeof(used)); Yes=false; } return 0;}
uva10344-Calculate 23 points