zoukankan      html  css  js  c++  java
  • C++笔记(6)——关于OJ的单点测试和多点测试

    单点测试

    PAT使用的就是单点测试(LeetCode应该也是单点测试)。单点测试中系统会判断每组数据的输出结果是否正确,正确则通过测试并获得这则测试的分值。题目的总得分等于通过的数据的分值之和。

    代码编写上单点测试只要求程序能够按照正常逻辑执行一遍。

    多点测试

    多点测试要求程序能够一次性运行所有数据,并且要求所有输出结果都完全正确才能AC,只要一组数据输出错误那么这题就只能0分。大部分OJ都是这种方式。只有这种方式才能严格考验写出的代码是否严谨。多点测试的程序需要能够运行所有数据,所以必须保证程序有办法反复执行代码核心部分,所以需要用到循环。

    通常题目有3中输入格式,下面是对应的输入程序:

    while...EOF型

    scanf函数返回值为成功读入的参数的个数,当读入失败的时候scanf函数返回-1,而C中使用EOF(End Of File)来表示-1。

    while(scanf("%d", &n) != EOF) {
        // 这里填运行代码
    }
    

    另外有gets(str)

    while(gets(str) != NULL) {
        // 这里填核心代码
    }
    

    while...break型

    这是用在题目要求当输入的数据满足某个条件时停止输入时的,例如当输入的ab都为0时结束输入:

    #include <stdio.h>
    
    int main() {
        int a, b;
        while(scanf("%d%d", &a, &b) != EOF) {
            if(a==0 && b==0) break;
            printf("%d
    ", a+b);    // 这里可以换成别的
        }
        return 0;
    }
    

    另一种是将推出条件放在while判断中:

    #include <stdio.h>
    
    int main() {
        int a, b;
        while(scanf("%d%d", &a, &b), a || b) {
            printf("%d
    ", a+b);
        }
        return 0;
    }
    

    这样当ab中只要有1个不是0那么就会一直循环下去。

    while(T--)型

    这种就是每次都会给定测试数据的组数,所以需要变量T来存储程序要执行的次数,最后程序循环执行T次,每次解决一组数据:

    #include <stdio.h>
    
    int main() {
        int T, a, b;
        scanf("%d", &T):
        while(T--) {
            scanf("%d%d", &a, &b);
            printf("%d
    ", a+b);
        }
        return 0;
    }
    

    此外,多点测试中要注意每次循环前重置一下变量和数组,重置数组通常用memsetfill

    参考

    《算法笔记》 胡凡 著

  • 相关阅读:
    linq to sql 扩展方法
    跨线程的安全更新控件
    WinForm程序启动控制台窗口Console
    Winfrom巧用Using设置鼠标为WaitCursor
    在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。
    基于Token的身份验证——JWT(转)
    jwt算法
    session问题总既然(深入理解)&Token问题理解&sso单点登陆理解实现
    1.spring boot要求最低jdk1.8,平安默认1.6问题,-》安装JDK1.8 2.maven 3.3.3要求最低jdk1.7->安装jdk 1.8
    批量插入删除
  • 原文地址:https://www.cnblogs.com/yejianying/p/cpp_notes_6.html
Copyright © 2011-2022 走看看