• windows/mac/linux 用C++搭建一个刷题模拟器


    一个刷题模拟器,一定要有题,题目从这里下载

    欢迎大家提供新题目(请把题目文件夹压缩成zip后发给我chengyixuan130812@163.com),我会定期更新的。

    题目格式:

    题目编号

            nums.txt(评测点个数)

            题目描述.txt(题目描述)

            1_in.txt(第1个测试点的输入)

            1_out.txt(第1个测试点的输出)

            ……

            n_in.txt(例如n=10,文件名为10_in.txt)

            n_out.txt(例如n=10,文件名为10_out.txt)

    下面是正文:

    我把这个项目分成了几块,分别是:显示题目描述、编译程序、评测

    最后我还做了一个“开始做题”的程序

    先在你的工程里建一个文件夹,把题目和程序放在这个目录下。注意,最后编译的时候请在目录下编译

    先把要做的题号放在了“题号.txt”文件里

    这样显示题目描述就简单了,只要把题号读出来,再找到文件夹里的“题目描述.txt”并输出就好了

    题目描述.cpp 

    windows:

    1. #include
    2. #include
    3. using namespace std;
    4. int main()
    5. {
    6. ifstream fin("\\题号.txt");
    7. string num;
    8. fin >> num;
    9. fin.close();
    10. fin.open("\\" + num + "\\题目描述.txt");
    11. string s;
    12. while(getline(fin,s))
    13. {
    14. cout << s << endl;
    15. }
    16. return 0;
    17. }

    mac/linux:

    1. #include
    2. #include
    3. using namespace std;
    4. int main()
    5. {
    6. ifstream fin("./题号.txt");
    7. string num;
    8. fin >> num;
    9. fin.close();
    10. fin.open("./" + num + "/题目描述.txt");
    11. string s;
    12. while(getline(fin,s))
    13. {
    14. cout << s << endl;
    15. }
    16. return 0;
    17. }

    我把题目程序放在了test.cpp文件里

    如果想要在终端编译程序,可以输入g++ -o main main.cpp(这里要编译的文件是main.cpp,而编译出来的文件是main/main.exe)

    在程序里只要使用system("g++ -o main main.cpp");就能编译成功了

    make.cpp

    1. #include
    2. #include
    3. using namespace std;
    4. int main()
    5. {
    6. system("g++ -o test test.cpp");
    7. return 0;
    8. }

     

    最后评测环节,把评测点读入到程序里,把它存在一个文件里,与评测点的输出做比较,如果相同那么就对了,我结果记录在一个“检测结果.txt”文件里

    windows:

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. ifstream fin("题号.txt");
    6. string ti;
    7. fin >> ti;
    8. fin.close();
    9. fin.open(ti + "\\nums.txt");
    10. int nums;
    11. fin >> nums;
    12. fin.close();
    13. int cnt = 0;
    14. system("./make.exe");
    15. ofstream fout("检测情况.txt",ios::trunc);
    16. for(int i = 1;i <= nums;i++)
    17. {
    18. string dic = "test_" + to_string(i) + ".out";
    19. freopen(dic.c_str(),"w",stdout);
    20. string s = ti + "\\" + to_string(i) + "_in.txt";
    21. freopen(s.c_str(),"r",stdin);
    22. system("./test");
    23. fclose(stdin);
    24. ifstream fin1(dic);
    25. ifstream fin2(ti + "\\" + to_string(i) + "_out.txt");
    26. string s1,s2;
    27. bool flag = true;
    28. while(getline(fin1,s1) && getline(fin2,s2))
    29. {
    30. if(s1 != s2)
    31. {
    32. flag = false;
    33. }
    34. }
    35. fout << to_string(i) << ":";
    36. if(flag)
    37. {
    38. fout << "AC" << endl;
    39. cnt++;
    40. }
    41. else
    42. fout << "WA" << endl;
    43. fclose(stdout);
    44. }
    45. printf("你得到了%d分",(int)floor(1.0 * cnt / nums));
    46. return 0;
    47. }

    mac/linux:

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. ifstream fin("./题号.txt");
    6. string ti;
    7. fin >> ti;
    8. fin.close();
    9. fin.open(ti + "/nums.txt");
    10. int nums;
    11. fin >> nums;
    12. fin.close();
    13. int cnt = 0;
    14. system("./make");
    15. ofstream fout("./检测情况.txt",ios::trunc);
    16. for(int i = 1;i <= nums;i++)
    17. {
    18. string dic = "./test_" + to_string(i) + ".out";
    19. freopen(dic.c_str(),"w",stdout);
    20. string s = "./" + ti + "/" + to_string(i) + "_in.txt";
    21. freopen(s.c_str(),"r",stdin);
    22. system("./test");
    23. fclose(stdin);
    24. ifstream fin1(dic);
    25. ifstream fin2("./" + ti + "/" + to_string(i) + "_out.txt");
    26. string s1,s2;
    27. bool flag = true;
    28. while(getline(fin1,s1) && getline(fin2,s2))
    29. {
    30. if(s1 != s2)
    31. {
    32. flag = false;
    33. }
    34. }
    35. fout << to_string(i) << ":";
    36. if(flag)
    37. {
    38. fout << "AC" << endl;
    39. cnt++;
    40. }
    41. else
    42. fout << "WA" << endl;
    43. fclose(stdout);
    44. }
    45. printf("你得到了%d分",(int)floor(1.0 * cnt / nums));
    46. return 0;
    47. }

    最后把所有文件编译即可

  • 相关阅读:
    解决因对EFCore执行SQL方法不熟练而引起的问题
    【PTHREAD】线程互斥与同步之自旋锁
    改进YOLOv5系列:结合ShuffleNet V2主干网络,高效CNN架构设计的实用指南
    轻量级的项目管理看板工具-Leangoo领歌
    C++模板初阶
    和月薪3W的聊过后,才知道自己一直在打杂...
    9.变换之平移
    HTML5-4-表单
    Nexus-3.41.1安装
    Bash sleep随机时间
  • 原文地址:https://blog.csdn.net/weixin_68756152/article/details/134039334