windows和linux下如何对拍

对拍是各种计算机考试检查时必备工具,实际上十分强大,只要你的暴力没有写错就没有问题。



对拍的意思:(怎么有点语文课的意思雾)

对:看见‘对’就可以知道有两个。

拍:就是把两个程序结果拍在一起,对照(有点牵强)。


实践

由于Windows和Linux系统不同,平常大多数人都用Windows,而在noi系列赛事中都采用Linux系统。


Windows

就以a+b为例吧。

首先摆一个可能是正解的东西。
这个代码文件名:1.cpp

#include<cstdio>
#include<windows.h>
#include<ctime>
#include<cstdlib>
using namespace std;
int main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    for(int i=1;i<=n;i++)a++,b--;
    printf("%d\n",a+b);
    return 0;
 } 

现在摆一个一定是正确的但时间和内存超标的代码,当然例子没有超标。
这个代码文件名:2.cpp

#include<cstdio>
using namespace std;
int main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    printf("%d\n",a+b);
    return 0;
}

构造数据。

注意

不能只用rand构造,因为rand表示伪随机数,在一定基数下一定,所以用rand构造的随机数出题人也知道你构造的是什么(然后故意卡你)

所以介绍一个新东西。

#include<ctime>

这个怎么用???

srand(time(NULL));

这个时候,他的随机数随时间变化(笑),出题人再也搞不出来卡你的算法了;
rand要用cstdlib库
代码文件名:data.cpp

#include<cstdio>
#include<ctime>
#include<cstdlib>
using namespace std;
int main()
{
    srand(time(NULL));
    printf("%d %d\n",rand()%1000,rand()%1000);
}

注意换行符必须加,否则你想想手动输入数据不加换行会怎么样。

下面的就是对拍程序:
代码文件名:duipai.cpp

#include<stdio.h>
#include<time.h>
#include<windows.h>
using namespace std;
int main()
{
    int t=1000;//如果不是自己电脑可以无限调大,不过要悠着点(笑)
    while(t!=0)
    {
        clock_t t1,t2;//设时间
        system("data.exe>data.txt");//把data文件转化成txt格式
         t1=clock();
        system("1.exe<data.txt>1.txt");//把1文件搜如data.txt然后转化成1.txt
         t2=clock()-t1;
        system("2.exe<data.txt>2.txt");//把2文件搜如data.txt然后转化成2.txt
        printf("time=%dms\n",t2);//计算时间,可能会大一些
        if(system("fc 1.txt 2.txt"))break;//比较1.txt与2.txt不同就跳出
        t--;
    }
    if(t==0)printf("no error\n");
    else printf("error\n");
    getchar();
    return 0;
}

程序运行。

如果程序出错就在生成的txt文件里找样例:

data.txt里是样例。1.txt和2.txt是输出。


Linux系统

这个系统是我不经常接触的(实际上只在考试接触),所以如有口胡请见谅,请指出。

还是a+b。(其实Windows也可以这么搞)
文件名:1.cpp

#include<cstdio>
using namespace std;
int main()
{
    freopen("add.in","r",stdin);
    freopen("add.out","w",stdout);
    int a,b;
    scanf("%d%d",&a,&b);
    for(int i=1;i<=n;i++)a++,b--;
    printf("%d\n",a+b);
    return 0;
 } 

暴力:

文件名:2.cpp

#include<cstdio>
using namespace std;
int main()
{
    freopen("add.in","r",stdin);
    freopen("add1.out","w",stdout);
    int a,b;
    scanf("%d%d",&a,&b);
    printf("%d\n",a+b);
    return 0;
}

造数据:

文件名:data.cpp

#include<cstdio>
#include<ctime>
#include<cstdlib>
using namespace std;
int main()
{
    freopen("add.in","w",stdout);
    srand(time(NULL));
    printf("%d %d\n",rand()%1000,rand()%1000);
}

对拍:

文件名:duipai.cpp

#include<bits/stdc++.h>//由于windows.h库在Linux下不可用,我也不知道system应调用什么文件,就用万能头文件233.
using namespace std;
int main()
{
    int t=10;
    while(t!=0)
    {
        clock_t t1,t2;
        system("./data");//打开data
         t1=clock();
        system("./1");//打开文件1
        t2=clock()-t1;
        system("./2");//打开文件2
        printf("time=%dms\n",t2);
        if(system("diff add.out add1.out"))break;//比较答案
        t--;
    }
    if(t==0)printf("no error\n");
    else printf("error\n");
    getchar();
    return 0;
}

由于不善于用linux系统,所以没有留下图片,抱歉



点击右下角推荐

评论区可以表白

原文地址:https://www.cnblogs.com/zwp2004/p/10386439.html

时间: 2024-10-01 07:25:59

windows和linux下如何对拍的相关文章

【大话QT之五】Windows与Linux下文件操作监控的实现

一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场上网盘实现有一些的不同,主要在客户端与服务器端的操作需要双向进行,即:用户在客户端的操作需要及时同步到服务器端:在服务器端作业渲染生成的文件要及时同步到客户端.即:用户不在需要单独的下载数据,而是在作业运行的同时,渲染就过就会自动同步到客户端,大大缩短了等待时间.当然,无论是在客户端还是在服务端都面

socket在windows下和linux下的区别

windows到Linux代码移植遇到的问题 1.一些常用函数的移植 http://www.vckbase.com/document/viewdoc/?id=1586 2.网络 ------ 转载 & 修改(待整理) socket相关程序从windows移植到linux下需要注意的 1)头文件 windows下winsock.h/winsock2.h linux下sys/socket.h 错误处理:errno.h 2)初始化 windows下需要用WSAStartup linux下不需要 3)关

MySQL在Windows和Linux下还原数据库

Linux下还原数据库代码: 1,创建一个空的数据库cddl mysql> create database cddl; Query OK, 1 row affected (0.00 sec) 2,还原数据库 [[email protected] mysqlsoftware]# cd /etc/rc.d/init.d [[email protected] mysqlsoftware]# cd /etc/rc.d/init.d [[email protected] init.d]# mysql -h

Windows 和 Linux下使用socket下载网页页面内容(可设置接收/发送超时)的代码

主要难点在于设置recv()与send()的超时时间,具体要注意的事项,请看代码注释部分,下面是代码: [cpp] view plaincopyprint? #include <stdio.h> #include <sys/types.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <string.h> #ifdef _WIN32   ///

如何在windows下和linux下获取文件(如exe文件)的详细信息和属性

程序员都很懒,你懂的! 最近在项目开发中,由cs开发的exe的程序,需要自动升级,该exe程序放在linux下,自动升级时检测不到该exe程序的版本号信息,但是我们客户端的exe程序需要获取服务器上新程序的版本号信息.最后由我用java实现linux上exe文件的版本号读取功能.下面是详细代码: package com.herman.utils; import java.io.File; import java.io.FileNotFoundException; import java.io.I

打通windows和Linux下的传输问题解决只能使用SSH协议下的22端口来传输文件(Openssh for windows)

目的:打通windows和Linux下的传输问题解决只能使用SSH协议下的22端口来传输文件 环境: windows IP192.168.1.120 Linux IP192.168.101 方法: 安装opensshfor windows (次软件开源并增加ssh协议将windows模拟成Unix环境) 安装完软件导入本地用户或者域用户 进入到bin目录下面执行 cd "c:\Program Files(x86)\OpenSSH\bin" mkgroup -l >>..\e

windows和linux下如何远程获取操作系统版本和主机名

远程获取windows和linux操作系统版本和主机名需要具备以下条件: 假设 主机A(windows 7),ip:192.168.12.2 主机B(centos 6.3),ip:192.168.12.3 主机C(windows 2008)-为远程要获取信息的主机,ip:192.168.12.4 主机D(centos 6.3)-为远程要获取信息的主机,ip:192.168.12.5 windows: 1.主机A可以ping通主机C: 2.主机B可以ping通主机C: 3.主机B可以通过161端口

怎样在Windows和Linux下写相同的代码

目前,Linux在国内受到了越来越多的业内人士和用户的青睐.相信在不久的将来,在国内为Linux开发 的应用软件将会有很大的增加(这不,金山正在招兵买马移植WPS呢).由于未来将会是Windows和Linux两强鼎立的格局,怎样能够使得开发的软件保持最大的可移植性就成了一个很重要的问题.小弟经过一段时间的摸索,找到了这个问题的圆满解答. 在Linux下,所有的开发工具和库都属于自由软件,可以免费获得并且功能强大.如果这些工具和库都有相应的Windows版,那么我们就能够在Windows和Linu

windows和linux下结束循环的操作

#include <iostream> #include <string> #include <sstream> using namespace std; int main() { string word; string line; while (getline(cin,line)) { istringstream istr(line); while(istr>>word) cout<<word<<"#"; cou