zoukankan      html  css  js  c++  java
  • 四则运算第二篇

    题目啊:

    像二柱子那样,花二十分钟写一个能自动生成三十道小学四则运算题目的 “软件”,

    要求:除了整数以外,还要支持真分数的四则运算(需要验证结果的正确性)、题目避免重复、可定制出题的数量。

    附加内容:

    可以控制下列参数: 是否有乘除法; 是否有括号(最多可以支持十个数参与计算); 数值范围; 加减有无负数; 除法有无余数。

    思路:

    首先确定要出的题目数也就是i,然后循环  i  遍下边的算法来出题,如果最大要出十个数的运算即需要人为确定一个最大的位数也

    就是n,n是大于等于2小于等于10的。然后再要求用户输入要出的题目的数值范围循环也就是numLowBound和numhighBound遍选取随机数。确定是否执行除法的模块

    如果不执行除法模块则随机其余三种运算,再确定是否要加括号及几对。最后判断加减有无负数; 除法有无余数。总之多次利用范

    围选择以及模块的调用。

    其中

    数量:amout 乘除法:mulAndDiv  下限:numLowBound  上限:numHighBound  是否有负数:neviNum  是否有余数:0remainder  

    代码啊:

      1 package 四则运算;
      2 //马建宁写于2017.3.8周三下午
      3 import java.math.*;
      4 import java.util.Scanner;
      5 public class caculate2 
      6 {
      7     public static void main(String args[])
      8     {
      9         mathOperation P = new mathOperation();
     10         P.SetValue();
     11         P.output();
     12         P.ProduceRandom();
     13         P.Output();    
     14     }
     15 }
     16 
     17 class mathOperation
     18 {
     19     private int[] firNum = new int[100];
     20     private int[] secNum = new int[100];
     21     private int[] operNum = new int[100];
     22     private int index;
     23     private int amout;
     24     private int mulAndDiv;
     25     private int numLowBound;
     26     private int numHighBound;
     27     private int neviNum;
     28     private int remainder;
     30     public mathOperation()
     31     {
     32         for(int i=0;i < 100;i++)
     33         {
     34             firNum[i] = -1;
     35             secNum[i] = -1;
     36         }
     37         mulAndDiv = 1;
     38         numLowBound = 1;
     39         numHighBound = 99;
     40         neviNum = 0;
     41         remainder = 0;
     42         index = 0;
     43         amout = 100;
     44     }
     45     
     46     //设置是否有乘除法
     47     public void set_mulAndDiv(int n)
     48     {
     49         mulAndDiv = n%2;
     50     }
     51     
     52     //设置是否有负数
     53     public void set_neviNum(int n)
     54     {
     55         neviNum = n%2;
     56     }
     57     
     58     //设置是否有余数
     59     public void set_remainder(int n)
     60     {
     61         remainder = n%2;
     62     }
     63     
     64     //设置计算下限
     65     public void set_numLowBound(int n)
     66     {
     67         if(n < 0)
     68         {
     69             System.out.println("下限为负值!恢复为1");
     70             numLowBound = 1;
     71         }
     72         else
     73         {    
     74             numLowBound = n;
     75         }
     76     }
     77     //设置计算上限
     78     public void set_numHighBound(int n)
     79     {
     80         if(n < 0)
     81         {
     82             System.out.println("上限为负值!恢复为1");
     83             numHighBound = 99;
     84         }
     85         else
     86         {    
     87             numHighBound = n;
     88         }
     89     }
     90         
     91     //设置用户要求产生题目的数量
     92     public void set_amout(int n)    
     93     {
     94         if(n >= 1 && n <= 100)
     95             amout = n;
     96         else
     97             System.out.println("对不起,您设置的题目量已经超出本程序的运行能力之外!");
     98     }
     99         
    100     public void SetValue()
    101     {
    102         int amoutValue;//题目的数量
    103         int mulAndDivValue;//乘除法的状态值 
    104         int numLowBoundValue;//下限
    105         int numHighBoundValue;//上限
    106         int neviNumValue;//负数 
    107         int remainderValue;//是否有余数
    108         System.out.println("hello word!");
    109         
    110         
    111         Scanner sc = new Scanner(System.in);
    112         System.out.println("请规定产生题目的数量:(限制范围在1到100之间)");
    113         amoutValue = sc.nextInt();
    114         set_amout(amoutValue);
    115         
    116         System.out.println("请规定数值的下限:(限制范围在1到100之间)");
    117         numLowBoundValue = sc.nextInt();
    118         set_numLowBound(numLowBoundValue);
    119         
    120         System.out.println("请规定数值的上限:(限制范围在1到100之间)");
    121         numHighBoundValue = sc.nextInt();
    122         set_numHighBound(numHighBoundValue);
    123         
    124         System.out.println("请规定是否有乘除法(0代表没有1代表有)");
    125         mulAndDivValue = sc.nextInt();
    126         set_mulAndDiv(mulAndDivValue);
    127         
    128         System.out.println("请规定减法的结果是否有负数(0代表没有1代表有)");
    129         neviNumValue = sc.nextInt();
    130         set_neviNum(neviNumValue);
    131         
    132         if(mulAndDivValue == 1)
    133         {
    134             System.out.println("请规定除法结果是否有余数(0代表没有1代表有)");
    135             remainderValue = sc.nextInt();
    136             set_remainder(remainderValue);
    137         }
    138         
    139     }
    140     
    141     
    142     //查重
    143     public boolean RepCheck(int leftNum,int rightNum,int mNum)
    144     {
    145         boolean flag = true;//初始为没有重复的题目
    146         for(int i = 0;i < index;i++)
    147         {
    148             if(firNum[i] == leftNum && secNum[i] == rightNum && operNum[i] == mNum)
    149             {
    150                 flag = false;
    151                 break;
    152             }
    153         }
    154         return flag;
    155     }
    156     
    157     //生产符合要求的随机数
    158     public void ProduceRandom()
    159     {
    160         
    161         boolean f = false;
    162         while(index <= amout-1)
    163         {
    164             int leftNum = (int)(Math.random()*(numHighBound-numLowBound+1))+numLowBound;//生成左操作数
    165             int rightNum = (int)(Math.random()*(numHighBound-numLowBound+1))+numLowBound;//生成右操作数
    166             int mNum = (int)(Math.random()*4)+1;//随机取1234也就是加减乘除的随机选择
    167             
    168             //如果不允许产生乘除就产生加减
    169             if(mNum == 3 && mulAndDiv == 0)
    170                 mNum = 1;
    171             if(mNum == 4 && mulAndDiv == 0)
    172                 mNum = 2;
    173             
    174             //控制负数的产生
    175             if(mNum == 2 && neviNum == 0)
    176             {
    177                 int midNum;
    178                 if(leftNum < rightNum)
    179                 {
    180                     midNum = leftNum;
    181                     leftNum = rightNum;
    182                     rightNum = midNum;
    183                 }
    184             }
    185             
    186             
    187             //控制余数的产生
    188             if(mNum == 4 && mulAndDiv == 1 && remainder == 0)
    189             {
    190                 int midNum;
    191                 if(leftNum < rightNum)
    192                 {
    193                     midNum = leftNum;
    194                     leftNum = rightNum;
    195                     rightNum = midNum;
    196                 }
    197                 leftNum = leftNum/rightNum * rightNum;
    198             }
    199             
    200  
    201             f = RepCheck(leftNum,rightNum,mNum);
    202             
    203       
    204             if(f == true)
    205             {
    206                 firNum[index] = leftNum;
    207                 secNum[index] = rightNum;
    208                 operNum[index] = mNum;
    209                 index++;
    210             }
    211         }    
    212     }
    213     
    214     //输出记录结果的数组
    215     public void Output()
    216     {
    217         for(int i = 0;i < amout;i++)
    218         {
    219             System.out.print(firNum[i]);
    220             if(operNum[i] == 1)
    221                 System.out.print("+");
    222             if(operNum[i] == 2)
    223                 System.out.print("-");
    224             if(operNum[i] == 3)
    225                 System.out.print("*");
    226             if(operNum[i] == 4)
    227                 System.out.print("/");
    228             System.out.println(secNum[i]);
    229             
    230         }
    231     }
    232     
    233     public void output()
    234     {
    235         System.out.println("amout "+amout+"mulAndDiv  "+mulAndDiv+"numLowBound  "+numLowBound+
    236                 "numHighBound  "+numHighBound+"neviNum  "+neviNum+"remainder  "+remainder);
    237     }
    238 }

    截图:

    日期和任务 听课(单位min) 编程序单位min) 总计单位min)
    周一    110 50 160
    周二   0 0
    周三   180 180
    周四   50 50
    周五(三月十号)   90 90
    周六   120 120
    周日   0 0
    周总记 110 490 600
    日期

    开始

    时间

    结束

    时间

    中断

    时间

    净时间 活动 备注
    周一 14点 16点 10分钟 110min 上课 认真听讲
      七点 八点 10分钟 50min 看书编程回顾上课 复习
    周三 14:30 18:00 30min 180min 写程序浏览专业网站 查资料编程加中途休息
    周四 14:30 15;30 10min 50min 写程序 查资料加写程序
    周五 12:00 13:30   90min 整理程序及上传 上传博客园加整理代码
    周六

    15:00

    17:00   120 查阅别人程序 查漏补缺
  • 相关阅读:
    204. 计数质数
    236. 二叉树的最近公共祖先
    优先队列和哈夫曼树
    185. 部门工资前三高的所有员工(求组内前几的值)
    部门工资最高的员工(求组内最大值)
    回调函数的案例
    单链表
    动态数组
    一致性哈希算法的基本原理
    只用2GB内存在20亿个整数中找到出现次数最多的数
  • 原文地址:https://www.cnblogs.com/ever1961211/p/6527748.html
Copyright © 2011-2022 走看看