【程序5】填运算符

[java]  view plain copy
  1. /*【程序5】 
  2.  * 在下面的算式中添加上“+、-、*、/”运算符,使等式成立(不使用括号); 
  3.  * 5   5   5   5   5 = 5 
  4.  * 1.4  枚举(穷举)算法 
  5.  * 1.4.3  实例:填运算符 
  6.  *  
  7.     由于算术表达式的特殊性,在编程求解这个算式时,需要注意以下几点: 
  8.     当填入除号时,要求右侧的数不能为0。 
  9.     乘除的运算级别比加减高。             
  10.  
  11.     5 + 5 - 5 * 5 / 5 = 5 
  12.  */  
  13.   
  14. import java.util.Scanner;  
  15. public class T005 {  
  16.     public static void main(String[] args){  
  17.         Scanner scan = new Scanner(System.in);  
  18.         System.out.print("输入5个数:");  
  19.         int num[] = new int[5];  
  20.         for(int i=0;i<5;i++){  
  21.             num[i] = scan.nextInt();  
  22.         }  
  23.         System.out.print("输入结果:");  
  24.         int result = scan.nextInt();      
  25.         char[] oper = {'+','-','*','/'};  
  26.         int count=0// 计数   
  27.         int i[] = new int[4];   // 循环用 i[0] i[1] i[2] i[3]  
  28.           
  29.         for(i[0]=0;i[0]<4;i[0]++){   // (i=0,1,2,3) 0='+', 1='-', 2='*', 3='/'  
  30.             if(i[0]<3||num[1]!=0){  
  31.                   
  32.                 for(i[1]=0;i[1]<4;i[1]++){  
  33.                     if(i[1]<3||num[2]!=0){  
  34.                           
  35.                         for(i[2]=0;i[2]<4;i[2]++){  
  36.                             if(i[2]<3||num[3]!=0){  
  37.                                   
  38.                                 for(i[3]=0;i[3]<4;i[3]++){  
  39.                                     if(i[3]<3||num[4]!=0){  
  40.                                         float left = 0;  
  41.                                         float right = num[0];  
  42.                                         int sign = 1;   // 正负号  
  43.                                         for(int j=0;j<4;j++){  
  44.                                             switch(oper[i[j]]){  
  45.                                                 case '+':  
  46.                                                     left = left+sign*right;  
  47.                                                     sign = 1;  
  48.                                                     right = num[j+1];  
  49.                                                     break;  
  50.                                                 case '-':  
  51.                                                     left = left+sign*right;  
  52.                                                     sign = -1;  
  53.                                                     right = num[j+1];  
  54.                                                     break;  
  55.                                                 case '*':  
  56.                                                     right = right * num[j+1];  
  57.                                                     break;  
  58.                                                 case '/':  
  59.                                                     right = right / num[j+1];  
  60.                                                     break;  
  61.                                             }  
  62.                                         }  
  63.                                         if(left+sign*right == result){  
  64.                                             count++;  
  65.                                             System.out.print(count+":");  
  66.                                             for(int j=0;j<4;j++){  
  67.                                                 System.out.print(num[j]+""+oper[i[j]]+"");  
  68.                                             }  
  69.                                             System.out.println(num[4]+"="+result);  
  70.                                         }  
  71.                                     }  
  72.                                 }  
  73.                             }  
  74.                         }  
  75.                     }  
  76.                 }  
  77.             }  
  78.         }  
  79.         if(count==0){  
  80.             System.out.println("没有符合要求的方法!");  
  81.         }  
  82.     }  
  83. }  

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值