标签:
一 题目
是否有乘除法;
是否有括号(最多可以支持十个数参与运算);
数值范围;
加减有无负数;
除法有无余数;
二 设计思路
分情况讨论编写代码;
先按是否有括号分为两种情况;
有括号时用二叉树随机生成四则运算题;
没括号时按各种不同的题目要求限制生成的随机数和运算符号。
运行结果截屏:
程序源代码:
1 import java.util.Random ; 2 import java.util.Scanner; 3 import java.lang.reflect.Array; 4 import java.util.LinkedList; 5 import java.util.List; 6 7 public class FourOperations1 8 { 9 public static void main(String[] ages) 10 { 11 while(1>0) 12 { 13 System.out.print("\n请选择要求:" 14 +"\n 是否有乘除法;(True/False)" 15 +"\n 是否有括号(最多可以支持十个数参与运算)(True/False);" 16 +"\n 数值范围(True(1~10)/False(1~100));" 17 +"\n 加减乘除有无负数(True/False);" 18 +"\n 除法有无余数(True/False);"); 19 Scanner sc = new Scanner(System.in); 20 Boolean[] a=new Boolean[5]; 21 for(int i=0;i<5;i++) 22 { 23 a[i]=sc.nextBoolean(); 24 } 25 //sc.close(); 26 System.out.println("请输入要出题的个数"); 27 Scanner N = new Scanner(System.in); 28 int index=N.nextInt(); 29 //N.close(); 30 31 for(int ii=0;ii<index;ii++) 32 { 33 if(a[1]==false) 34 { 35 int a1=RandomNum(100),a2=RandomNum(100); 36 int sign=RandomNum(4); 37 if(sign==3&&a[4]==false) 38 { 39 a1=(a1%15)*(a2%10); 40 System.out.print("\n"+a1); 41 PrintSign(sign); 42 System.out.print(a2%10+" ="); 43 continue; 44 } 45 if(a[0]==false) 46 { 47 if(a[3]==false) 48 { 49 if(a[2]==false) 50 { 51 52 System.out.print("\n"+a1); 53 PrintSign(sign%2); 54 System.out.print(a2+" ="); 55 } 56 else if(a[2]==true) 57 { 58 System.out.print("\n"+a1%10); 59 PrintSign(sign%2); 60 System.out.print(a2+" ="); 61 } 62 } 63 else if(a[3]==true) 64 { 65 int ssign=RandomNum(2); 66 if(ssign==0){ 67 a1=-a1; 68 } 69 if(a[2]==false) 70 { 71 System.out.print("\n"+a1); 72 PrintSign(sign%2); 73 System.out.print(a2+" ="); 74 } 75 else if(a[2]==true) 76 { 77 System.out.print("\n"+a1%10); 78 PrintSign(sign%2); 79 System.out.print(a2%10+" ="); 80 } 81 } 82 } 83 else if(a[0]==true) 84 { 85 if(a[3]==false) 86 { 87 if(a[2]==false) 88 { 89 System.out.print("\n"+a1); 90 PrintSign(sign); 91 System.out.print(a2+" ="); 92 } 93 else if(a[2]==true) 94 { 95 System.out.print("\n"+a1%10); 96 PrintSign(sign); 97 System.out.print(a2%10+" ="); 98 } 99 } 100 else if(a[3]==true) 101 { 102 int ssign=RandomNum(2); 103 if(ssign==0){ 104 a1=-a1; 105 } 106 if(a[2]==false) 107 { 108 System.out.print("\n"+a1); 109 PrintSign(sign); 110 System.out.print(a2+" ="); 111 } 112 else if(a[2]==true) 113 { 114 System.out.print("\n"+a1%10); 115 PrintSign(sign); 116 System.out.print(a2%10+" ="); 117 } 118 } 119 120 } 121 } 122 else if(a[1]==true) 123 { 124 int size=RandomNum(9); 125 int[] array=new int[size*2+4]; 126 if(a[0]==false){ 127 for(int i=0;i<=size;i++){ 128 array[i]=RandomNum(2); 129 } 130 } 131 else if(a[0]==true){ 132 for(int i=0;i<=size;i++){ 133 array[i]=RandomNum(4); 134 } 135 } 136 if(a[2]==true){ 137 for(int i=size+1;i<=size*2+2;i++){ 138 array[i]=RandomNum(70)+4; 139 } 140 } 141 else if(a[2]==false){ 142 for(int i=size+1;i<=size*2+2;i++){ 143 array[i]=RandomNum(96)+4; 144 } 145 } 146 147 if(a[3]==true){ 148 for(int i=size+1;i<=size*2+2;i++){ 149 int ssign=RandomNum(2); 150 if(ssign==0){ 151 array[i]=-array[i]; 152 } 153 } 154 } 155 156 LinkedList<Node> nodeList = new LinkedList<Node>(); 157 for(int nodeIndex=0;nodeIndex<array.length;nodeIndex++){ 158 nodeList.add(new Node(array[nodeIndex])); 159 160 } 161 creatBinTree(array,nodeList); 162 Node root = nodeList.get(0); 163 inOrderTraverse(root); 164 System.out.println(" = "); 165 } 166 } 167 } 168 } 169 public static int RandomNum(int i) 170 { 171 Random a=new Random(); 172 int a1=a.nextInt (i); 173 return a1; 174 } 175 public static void PrintSign(int sign) 176 { 177 if(sign==0){ 178 System.out.print(" + "); 179 } 180 else if(sign==1){ 181 System.out.print(" - "); 182 } 183 else if(sign==2){ 184 System.out.print(" * "); 185 } 186 else if(sign==3){ 187 System.out.print(" / "); 188 } 189 else 190 System.out.print(sign); 191 } 192 193 public static class Node 194 { 195 Node leftchild; 196 Node rightchild; 197 int data; 198 199 Node(int newData){ 200 leftchild=null; 201 rightchild=null; 202 data=newData; 203 } 204 } 205 206 public static void creatBinTree(int array[],LinkedList<Node> nodeList){ 207 208 209 for(int parentIndex=0;parentIndex<array.length/2-1;parentIndex++){ 210 nodeList.get(parentIndex).leftchild = nodeList 211 .get(parentIndex * 2 + 1); 212 nodeList.get(parentIndex).rightchild = nodeList 213 .get(parentIndex * 2 + 2); 214 } 215 } 216 public static void inOrderTraverse(Node node) { 217 if (node == null) 218 return; 219 if (node.leftchild != null) { 220 System.out.print("("); 221 } 222 inOrderTraverse(node.leftchild); 223 PrintSign(node.data ); 224 inOrderTraverse(node.rightchild); 225 if (node.rightchild != null) { 226 System.out.print(")"); 227 } 228 } 229 230 }
标签:
原文地址:http://www.cnblogs.com/amiee/p/5295185.html