zoukankan      html  css  js  c++  java
  • 四则运算随机出题

    代码有一个小问题,就是精度可能会丢失。该代码不包含括号等操作符。

    c++代码:

    #include<bits/stdc++.h>
    using namespace std;
    float aa[5],bb[4],cc[10],cpaa[5]; 
    
    void operation_four(int n,int m)
    {
        int d;
        float flag = 0,flagn;
        flagn = n;
        d = n;
        srand((unsigned)time(NULL));
        for(int i = 0;i < d;i++)
        {
            float summ = 0;
            memset(aa,0,sizeof(aa));
            memset(bb,0,sizeof(bb));
            memset(cc,0,sizeof(cc));
            memset(cpaa,0,sizeof(cpaa));
            float first = rand() % 101;
            aa[0] = first;
            for(int j = 0;j < m;j++)
            {
                float a = rand() % 4;//符号 
                float b = rand() % 101;//数字 
                aa[j + 1] = b;
                bb[j] = a;
            }
            
            for(int k = 0;k < m + 1;k++)
                cpaa[k] = aa[k];
    
            //乘除法处理
            for(int k = 0;k < m;k++)
                if(bb[k] == 1)
                    aa[k + 1] = -aa[k + 1];
            for(int k = 0;k < m;k++)
            {
                if(bb[k] == 2 || bb[k] == 3)
                {
                    if(bb[k] == 2)
                    {
                        aa[k + 1] = aa[k] * aa[k + 1];
                        cc[k] = 1;
                    }
                    if(bb[k] == 3)
                    {
                        aa[k + 1] = aa[k] / aa[k + 1];
                        cc[k] = 1;
                    }
                }
            }
            
            for(int k = 0;k < m + 1;k++)
            {
                if(cc[k] == 0)
                {
                    summ += aa[k];
                    summ = ((float)((int)((summ + 0.005) * 100))) / 100;
                }
            }
            if(summ < 0)
            {
                d++;
                continue;
            }
            else//结果不为负就执行输出表达式语句 
            {
                for(int k = 0;k < m + 1;k++)
                {
                    cout << cpaa[k];
                    if(k < m)
                    {
                        if(bb[k] == 0)
                            cout << "+";
                        if(bb[k] == 1)
                            cout << "-";
                        if(bb[k] == 2)
                            cout << "*";
                        if(bb[k] == 3)
                            cout << "/";
                    }
                }
                cout << "=";
            }
            
            float in;
            cin >> in;
            if(in == summ)
            {
                cout << "" << endl;
                flag++;
            }
            else
                cout << "×" << endl; 
            cout << "正确答案为:" << summ << endl;
        }
        printf("正确率为:%.2f%%",flag / flagn * 100);
    }
    
    int main()
    {
        int n,m;
        cout << "说明:结果为整数直接输入整数,出现小数则保留小数后两位" << endl;
        while(1)
        {
            cout << "请输入题目数(不超过100个)和运算符个数(不超过3个):" ; 
            cin >> n >> m;
            if(n <= 100 && n >= 1 && m >= 1 && m <= 3)
                break;
            else
                cout << "不符合输入要求,请重新输入!" << endl;
        }
        operation_four(n,m);
        return 0;
    }

    运行结果:

     Java代码:

    package com.lb.test;
    
    import java.util.Scanner;
    
    public class Operator_four {
        public static void main(String[] args){
            int n,m;
            System.out.println("说明:结果为整数直接输入整数,出现小数则保留小数点后两位");
            while(true){
                System.out.println("请输入题目数(不超过100个)和运算符数(不超过3个):");
                Scanner sc = new Scanner(System.in);
                n = sc.nextInt();
                m = sc.nextInt();
                if(n <= 100 && n >= 1 && m >= 1 && m <= 3)
                    break;
                else
                    System.out.println("不符合输入要求,请重新输入!");
            }
            four2 f2 = new four2();
            f2.operation_four(n,m);
        }
    }
    package com.lb.test;
    
    import java.util.Random;
    import java.util.Scanner;
    
    public class four2 {
        public void operation_four(int n,int m){
            int d;
            float flag = 0,flagn;
            flagn = n;
            d = n;
            Random rand = new Random();
            for (int i = 0;i < d;i++){
                float[] aa = new float[] {0,0,0,0,0};
                float[] bb = new float[] {0,0,0,0};
                float[] cc = new float[] {0,0,0,0,0};
                float[] cpaa = new float[] {0,0,0,0,0};
                float summ = 0;
                float first = rand.nextInt(101);
                aa[0] = first;
                for(int j = 0;j < m;j++){
                    float a = rand.nextInt(4);
                    float b = rand.nextInt(101);
                    aa[j + 1] = b;
                    bb[j] = a;
                }
    
                for(int k = 0;k < m + 1;k++)
                    cpaa[k] = aa[k];
    
                for(int k = 0;k < m;k++){
                    if(bb[k] == 1){
                        aa[k + 1] = -aa[k + 1];
                    }
                }
                for(int k = 0;k < m;k++){
                    if(bb[k] == 2 || bb[k] == 3){
                        if(bb[k] == 2){
                            aa[k + 1] = aa[k] * aa[k + 1];
                            cc[k] = 1;
                        }
                        if(bb[k] == 3){
                            aa[k + 1] = aa[k] / aa[k + 1];
                            cc[k] = 1;
                        }
                    }
                }
    
                for (int k = 0;k < m + 1;k++){
                    if(cc[k] == 0){
                        summ = summ + aa[k];
                        summ = ((float)((int)((summ + 0.005) * 100))) / 100;
                    }
                }
                if(summ < 0){
                    d++;
                    continue;
                }
                else{
                    for (int k = 0;k < m + 1;k++){
                        System.out.print(cpaa[k]);
                        if(k < m){
                            if (bb[k] == 0)
                                System.out.print("+");
                            if (bb[k] == 1)
                                System.out.print("-");
                            if (bb[k] == 2)
                                System.out.print("*");
                            if (bb[k] == 3)
                                System.out.print("/");
                        }
                    }
                    System.out.print("=");
                }
    
                Scanner sc = new Scanner(System.in);
                float in;
                in = sc.nextFloat();
                if(in == summ){
                    System.out.println("√");
                    flag++;
                }else{
                    System.out.println("×");
                }
                System.out.println("正确答案为:" + summ);
            }
            System.out.println("正确率为:" + flag / flagn * 100 + "%");
        }
    }

    运行结果:

     代码还不够完善,需待后期改进

  • 相关阅读:
    【CodeForces】[612C]Replace To Make Regular Bracket Sequence
    【POJ】[1363]Rails
    【POJ】[1363]Rails
    【杭电】[1022]Train Problem I
    【杭电】[1022]Train Problem I
    【杭电】[1873]看病要排队
    【杭电】[1873]看病要排队
    【HPU】[1714]感恩节KK专场——送给新生的礼物
    【HPU】[1714]感恩节KK专场——送给新生的礼物
    [leetcode]392. Is Subsequence 验证子序列
  • 原文地址:https://www.cnblogs.com/biaobiao88/p/12565396.html
Copyright © 2011-2022 走看看