【ACM】枚举法解决"填写字符串"问题

题目:5 5 5 5 5=5 插入4个四则运算符

#include<stdio.h>
int main(){
	int j,i[5];
	int sign,result,count=0;
	int num[6];
	float left,right;
	char oper[5]={'','+','-','*','/'};
	printf("input 5 nums");
	
	//输入数字到数组 
	for(j=1;j<=5;j++)
	{
		scanf("%d",&num[j]);
	}
	printf("输入结果");
	scanf("%d",&result); 
	
	
	for(i[1]=1;i[1]<=4;i[1]++)
	{
		if(i[1]<4)||(num[2]!=0)
		{
			for(i[2]=1;i[2]<=4;i[2]++)
			{
				if(i[2]<4)||(num[3]!=0)
				{
					for(i[3]=1;i[3]<=4;i[3]++)
					{
						if(i[3]<4||(num[4]))
						{
							for(i[4]=1;i[4]<=4;i[4]++)
							{
								if(i[4]<4||num[5]!=0)
								{
									left=0;
									right=num[1];
									sign=1;
									
									//填空
									for(j=1;j<=4;j++)
									{
										switch(oper[i[j]])
										{
											case '+':
												left=left+sign*right;
												sign=1;
												right=num[j+1];
												break;
											
											case '-':
												left=left+sign*right;
												sign=-1;
												right=num[j+1];
												break;
												
											case '*':
												right=right*num[j+1];
												break;
												
											case '/':
												right=right/num[j+1];
												break;
										}
									 } 
									
									if(left+sign*right==result)
									{
										count++;
										printf("%3d: ",count);
										for(j=1;j<=4;j++)
										{
											printf("%d%c",num[j],oper[i[j]]);

										}
										printf("%d=%d/n",num[5],result);
									}
									
								}
							}
						}
					}
				}
			}
		}
	}
	
	if(count==0) printf("no");
	getch();
	return 0;
}
posted @ 2019-07-10 10:11  嗨Sirius  阅读(70)  评论(0编辑  收藏  举报