【程序5】填运算符
2015-10-27 16:39
127 查看
[java] view
plaincopy
/*【程序5】
* 在下面的算式中添加上“+、-、*、/”运算符,使等式成立(不使用括号);
* 5 5 5 5 5 = 5
* 1.4 枚举(穷举)算法
* 1.4.3 实例:填运算符
*
由于算术表达式的特殊性,在编程求解这个算式时,需要注意以下几点:
当填入除号时,要求右侧的数不能为0。
乘除的运算级别比加减高。
5 + 5 - 5 * 5 / 5 = 5
*/
import java.util.Scanner;
public class T005 {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.print("输入5个数:");
int num[] = new int[5];
for(int i=0;i<5;i++){
num[i] = scan.nextInt();
}
System.out.print("输入结果:");
int result = scan.nextInt();
char[] oper = {'+','-','*','/'};
int count=0; // 计数
int i[] = new int[4]; // 循环用 i[0] i[1] i[2] i[3]
for(i[0]=0;i[0]<4;i[0]++){ // (i=0,1,2,3) 0='+', 1='-', 2='*', 3='/'
if(i[0]<3||num[1]!=0){
for(i[1]=0;i[1]<4;i[1]++){
if(i[1]<3||num[2]!=0){
for(i[2]=0;i[2]<4;i[2]++){
if(i[2]<3||num[3]!=0){
for(i[3]=0;i[3]<4;i[3]++){
if(i[3]<3||num[4]!=0){
float left = 0;
float right = num[0];
int sign = 1; // 正负号
for(int j=0;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++;
System.out.print(count+":");
for(int j=0;j<4;j++){
System.out.print(num[j]+""+oper[i[j]]+"");
}
System.out.println(num[4]+"="+result);
}
}
}
}
}
}
}
}
}
if(count==0){
System.out.println("没有符合要求的方法!");
}
}
}
运行结果:
plaincopy
/*【程序5】
* 在下面的算式中添加上“+、-、*、/”运算符,使等式成立(不使用括号);
* 5 5 5 5 5 = 5
* 1.4 枚举(穷举)算法
* 1.4.3 实例:填运算符
*
由于算术表达式的特殊性,在编程求解这个算式时,需要注意以下几点:
当填入除号时,要求右侧的数不能为0。
乘除的运算级别比加减高。
5 + 5 - 5 * 5 / 5 = 5
*/
import java.util.Scanner;
public class T005 {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.print("输入5个数:");
int num[] = new int[5];
for(int i=0;i<5;i++){
num[i] = scan.nextInt();
}
System.out.print("输入结果:");
int result = scan.nextInt();
char[] oper = {'+','-','*','/'};
int count=0; // 计数
int i[] = new int[4]; // 循环用 i[0] i[1] i[2] i[3]
for(i[0]=0;i[0]<4;i[0]++){ // (i=0,1,2,3) 0='+', 1='-', 2='*', 3='/'
if(i[0]<3||num[1]!=0){
for(i[1]=0;i[1]<4;i[1]++){
if(i[1]<3||num[2]!=0){
for(i[2]=0;i[2]<4;i[2]++){
if(i[2]<3||num[3]!=0){
for(i[3]=0;i[3]<4;i[3]++){
if(i[3]<3||num[4]!=0){
float left = 0;
float right = num[0];
int sign = 1; // 正负号
for(int j=0;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++;
System.out.print(count+":");
for(int j=0;j<4;j++){
System.out.print(num[j]+""+oper[i[j]]+"");
}
System.out.println(num[4]+"="+result);
}
}
}
}
}
}
}
}
}
if(count==0){
System.out.println("没有符合要求的方法!");
}
}
}
运行结果:
相关文章推荐
- 机房收费系统-经验总结
- winform上控件太多,绘制时会逐个出现,通常说双缓冲能解决但实际不能解决的问题的解决方法
- 数据库迁移导致sql 执行计划改变
- 151026的测试总结
- distinct top執行順序
- java处理相对路劲
- 解决Regsvr32: DllRegisterServer entry point was not found
- SwiftSocket 接收服务端byte[] 本地转换
- 计算机基础--网络基础专项练习笔记
- ZeroClipboard.js实现js复制功能(兼容ie9 和 ie10)
- 【程序4】填数游戏
- Activity生命周期
- Unity3D 多种播放音效的方式
- <libxml/tree.h> file not found
- Oracle 循环递归遍历树结构查询
- 151025的测试总结
- [nginx] 网上最全面nginx教程(近100篇文章整理)
- Spring/Hibernate 应用性能优化的7种方法
- MIME 参考手册
- C++函数返回二维数组