随机小写字母:=CHAR(INT(RAND()*26)+97)
随机大写字母:=CHAR(INT(RAND()*26)+65)
随机大小写混合字母:=CHAR(INT(RAND()*26)+if(INT(RAND()*2)=0,65,97))
有些情形下,我们需要生成一个不重复的随机序列。
比如:我们要模拟洗牌,将一副扑克牌去掉大小怪后剩下的52张打乱。
比较笨的闹携方法是在1-52间每生成一个随机数后,检查该随机数是否出现过,如果是第一次出现,就放到序列里,否则重新生成一个随机数作检查。在 excel worksheet里面用这种办法,会造成if多层嵌套,不胜其烦,在VBA里面做简单一些,但是效率太差,越到序列的后端,效率液梁伏越差。
当然也渣芦有比较好的办法,在VBA里面,将a(1)-a(52)分别赋予1-52,然后做52次循环,例如,第s次生成一个1-52间的随机数r,将a(s)与a(r)互换,这样的话,就打乱了原有序列,得到一个不重复的随机序列。
VBA里这个算法是很容易实现的,但是,出于通用性和安全考虑,有的时候我们并不希望用VBA,我们来看看在worksheet里面如何利用内置函数实现这个功能。
(1)在A1-A52间填入=INT(RAND()*52)+1,产生1-52间的随机数,注意这里是有重复的
(2)在B1-B52间填入1-52
(3)在C54-BB54填入1-52
(4)在C1填入=IF(ROW()=C$54,INDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),IF(ROW()=INDEX($A$1:$A$52,C$54),INDEX(B$1:B$52,C$54),B1))。
分项解释:
a:ROW()=C$54,如果当前行等于当前交换所排的序号
b:INDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),返回在B1到B52中选择A1:A52中的第C54个值
c:IF(ROW()=INDEX($A$1:$A$52,C$54),否则的话,如果当前行等于A1:A52中第C54个值,则:
d:INDEX(B$1:B$52,C$54),返回B1:B52中的第C54个值
e:若以上条件都不满足,则返回B1
(5)将C1复制到C1:BA52这个区域里面
(6)在BA1:BA52中,我们就得到了一个不重复的随机序列,按F9可以生成一个新序列。
随机产生六位数字密码=INT(RAND()*(899999-10001))+100001
EXCEL生成前2位是大写字母,中间4位是小写字母,后两位是数字
=CHAR(65+INT(RAND()*16))&CHAR(65+INT(RAND()*16))&CHAR(97+INT(RAND()*16))&CHAR(97+INT(RAND()*16))&CHAR(97+INT(RAND()*16))&CHAR(97+INT(RAND()*16))&INT(RAND()*10)&INT(RAND()*10)
在A1中输入公式=rand()*100000,表示随机数乘以一个比较大的数,然后往下填充N个单元格。在B1中输入排序公式=rank(A1,A:A),双击填充,或往下填充N个单元格,B1到BN就是你所需要的N个不同随机数了 #include <stdlib.h>
rand()
srand()
标准C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。
rand()函数没有输入参数,直接通过表达式rand()来引用;例如可以用下面的语句来打印两个随机数:
printf(Random numbers are: %i %i\n,rand(),rand())
因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机。
为了使程序在每次执行时都能生成一个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子。函数 srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。 文件名: rand_srand.c /*Thisprogramgeneratesandprintstenrandomintegersbetween1andRAND_MAX*/#include<stdio.h>#include<stdlib.h>intmain(){unsignedintseed/*申明初始化器的种子,注意是usignedint型的*/intkprintf(Enterapositiveintegerseedvalue:\n)scanf(%u,&seed)srand(seed)printf(RandomNumbersare:\n)for(k=1k<=10k++){printf(%i,rand())printf(\n)}return0}当提供的种子相同时,随机数序列也时相同的。而且当种子为1时,与不使用srand()函数时一样的,也就是说rand()函数默认情况下初始化种子值为1;
在stdlib.h 中这两个函数的原型是:
int rand()
void srand (unsigned int)
srand(time(0))i=rand()这样i就是一个真正意义上的随机数。 rand()产生伪随机数,srand函数提供种子,种子不同产生的随机数序列也不同,所以通常先调用srand函数 time(0)返回的是系统的时间(从1970.1.1午夜算起),单位:秒,种子不同当然产生的随机数相同几率就很小了。
File有个getName方法获取名字后用String的消悉指endsWith方法
import java.io.BufferedReader
import java.io.File
import java.io.FileReader
public class Test4 {
public static void main(String[] args) throws Exception {
File file = new java.io.File("c:/a.txt")
String name = file.getName()
if(!name.trim().toLowerCase().endsWith(".txt")) {
System.out.println("非.txt文件")
return
}
if(!file.isFile()) {
System.out.println("不是拿配文件")
return
}
FileReader fr = new FileReader(file)
BufferedReader br = new BufferedReader(fr)
StringBuilder b = new StringBuilder()
String str = null
while((str=br.readLine()) != null) {
b.append(str)
}
br.close()
System.out.println("陆袭文本文件内容:" + b.toString())
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)