• 《算法学习与应用 从入门到精通》——填写运算符


    题目:

    输入五个数,数与数之间用空格分开,然后给出结果,然后在5个数间添加“+”,“-”,“*”,“/”4个运算符,使得等式成立。
    例如:
    输入:5 5 5 5 5
    结果是5:
    5+5+5-5-5=5
    “+,+,-,-”算一组正确答案

    代码

    /*填写运算符*/
    #include <stdio.h>
    int main (void)
    {
    	int j;
    	int i[5];  		//数组i用来表示4个运算符
    	int sign;  		//累加运算时的符号
    	int result;  	//保存运算式的结果值
    	int count=0;  	//计数器,统计符合条件的方案
    	int num[6];  	//保存操作数
    	float left;  	//保存中间结果左值
    	float right;  	//保存中间结果右值
    	char oper[5]={' ','+','-','*','/'};  //五种运算符 
    	
    	printf("输入5个数,之间用空格隔开:");
    	for (j=1;j<=5;j++)  //使用for循环输入 
    	scanf ("%d",&num[j]);  //循环输入的五个数赋给num数组 
    	printf ("输入结果:  ");   
    	scanf ("%d",&result);
    	for (i[1]=1;i[1]<=4;i[1]++)  //循环4种运算符,1表示+,2表示-,3表示*,4表示/ 
    	{
    		if((i[1]<4)||(num[2]!=0))  //运算符若是/,则第二个运算数不能为0 
    		{
    			for (i[2]=1;i[2]<=4;i[2]++)  
    			{
    				if((i[2]<4)||(num[3]!=0))  //运算符若是/,则第三个数不能为0 
    				{
    					for (i[3]=1;i[3]<=4;i[3]++)
    					{
    						if((i[3]<4)||num[4]!=0)  //运算符若是/,则第四个数不能为0 
    						{
    							for (i[4]=1;i[4]<=4;i[4]++)
    							{
    								if((i[4]<4)||(num[5]!=0))  //运算符若是/,则第五个数不能为0 
    								{
    									left = 0;  //初始化左值为0 
    									right = num[1];  //初始化右值为num数组的第一个数 
    									sign = 1;  //用于累加运算,区别+和- 
    									for (j=1;j<=4;j++)  //运用for循环,用于判断两个数之间的符号
    									{
    										switch (oper[i[j]])  //switch语句,判断运算符进行运算 										                      
    										{
    											case'+':  //运算符为+时的情况 
    											    left=left+sign*right;
    												sign=1;
    												right=num[j+1];  //将num数组的第二个数赋给right
    												break;
    											case'-':  //运算符为-时的情况 
    											    left=left+sign*right;
    												sign=-1;   
    												right=num[j+1];  //将num数组的第三个数赋给right
    												break;
    											case'*':  //运算符为*时的情况 
    											    right=right*num[j+1];  //将num数组的第三个数
    												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("没有符合要求的方法! \n");
    
    getchar ();
    return 0;
    }
    
    
  • 相关阅读:
    HDU5873
    HDU5874
    HDU1565(状态压缩dp)
    POJ2774(二分+哈希)
    HDU4474
    HDU2602(背包)
    单链表
    POJ2503(hash)
    POJ1200(hash)
    顺序表
  • 原文地址:https://www.cnblogs.com/AlexKing007/p/12339349.html
Copyright © 2020-2023  润新知