python由于没有精度的限制(可以说是不存在高精的说法),所以可以方便快速的生成题目要求范围内的随机测试数据。而且不需要太深入的了解python的语法。
import random
注:random是python自带模块,它可以用来随机生成数据,不需要下载。
import random
print( random.random() ) #在[0,1)范围内随机生成的一个实数
print( random.randint(1,10) ) # 产生 1 到 10 的一个随机整数
print( random.random() ) # 产生 0 到 1 之间的随机浮点数
print( random.uniform(1.1,5.4) ) # 产生 1.1 到 5.4 之间的随机浮点数,区间可以不是整数
print( random.choice('tomorrow') ) # 从序列中随机选取一个元素
print( random.randrange(1,100,2) ) # 生成从1到100的间隔为2的随机整数(随机的奇数)
a=[1,3,5,6,7]
random.shuffle(a) # 将序列a中的元素顺序打乱
print(a)
0.418181846080815
10
0.016338410499876943
5.102477330276011
o
91
[5, 7, 3, 6, 1]
fileobject = open(file_name [, access_mode][, buffering])
可能对于新手来说上面这条语句有点难。其实我们成信息学奥赛题目测试数据,一般只会用到前两个参数;
1. 第一个参数是要打开指定文件的文件名,文件默认目录是和py文件同文件夹下;如果文件不存在,就会在与py文件同文件夹下新建一个文件;
2. 第二个参数是指打开文件后进行的操作。生成随机数据是往文件里面写数据,所以一般这个参数是“w”,其他操作详见链接。
如下所示,打开一个名叫test.in的文件,对其进行写的操作。
# 打开一个文件
fp = open("test.in", "w")#这里的"fp"是一个文件对象,相当于一个变量,名字任意
打开一个文件之后,就开始生成随机数据了,有了刚才random的基础,在加上python的循环语句,就可以生成随机数据了,写操作的语法如下:
fileObject.write(string)
调用文件对象的write函数,往文件里字符串string。
注意:由于文件的写操作是对字符串进行写操作,所以当你生成了随机数之后,你要把这些随机数使用强制类型转换函数str(int)转换成字符串之后,再进行写操作。
当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件。用 close()方法关闭文件是一个很好的习惯。
fileObject.close()
完成了以上内容的学习之后,已经基本上掌握了随机数据生成的流程与方法,下面给一个实例:
import random
fp = open("test1.in", 'w')#打开文件
for j in range(1,101):#题目要求输入有多组数据,我这里生成100组
c=random.randint(1,1001)#岛屿的数量c-1
fp.write(str(c-1)+" "+str(random.randint(99900,100000))+"\n")#对生成的随机数,转换成字符串之后再写
for i in range(1,c):
a = random.randint(-100000,100000)#横坐标的范围
b = random.randint(0,100000)#纵坐标的范围
fp.write(str(a)+" "+str(b)+"\n")
fp.write("\n")#每组数据之间有一个换行
fp.write("0 0\n")#输入"0 0"表示结束输入
fp.close();#关闭文件
使用题目的标准程序来得出输出数据,使用方法如下:
int main()
{
//freopen("test1.in","r",stdin);//文件的输入,读操作"r"
//freopen("test1.out","w",stdout);//文件的输出,写操作"w"
......
}
在你的题目对应的标准c++程序中的main()
函数的开头,加上文件的输入输出语句,就能够在与c++程序相同目录下生成所对应的输出数据。
注意:头文件为
#include
或#include
,所对应的输入输出就是scanf()和printf()
或cin和cout
。输入的文件就是刚才我们使用python所生成的文件。
有任何疑问可以在下方评论或者私信我,(●’◡’●)。