C语言、Java两种方式下的——规定范围内不重复随机数

示例1:C语言版

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//随机产生规定个数的不重复数字
int findSame(int *arr, int in, int n);

int main() {
	//设置随机种子
	srand((int)time(0));
	int arr[40] = {0}, tmp, length = 0;

	while(length <= 39) {
		tmp = (40 * rand()) / RAND_MAX;
		//第一个下标数直接复制进数组
		if (length == 0)
			arr[length] = tmp;
		else {
			//第二个下标数开始,判断随机数是否在数组已经存在,存在的话跳过,不存在就复制进数组
			if (findSame(arr, tmp, length) == 1)
				continue;
			else
				arr[length] = tmp;
		}
		length++;
	}

	for (int i = 0; i < 40; i++)
		printf("%d ", arr[i]);
	return 0;
}

int findSame(int *arr, int in, int n) {
	for (int i = 0; i < n; i++) {
		if (arr[i] == in)
			return 1;
	}
	return 0;
}

示例2:Java版

import java.util.*;
//打印10个不重复的随机数字1~10
public class NoRepeatNumber {

	public static void main(String[] args) {
		Random random = new Random();
		int [] nums = new int[10];
		List<Integer> mylist = new ArrayList<Integer>();
		int n = 10, temp, i = 0;

		while(mylist.size() < n){
			temp = random.nextInt(n) + 1;
			if (!mylist.contains(temp)) {
				mylist.add(temp);
				nums[i] = temp;
				System.out.print(nums[i] + " ");
			}
		}
	}

}

刚开始学习Java,还真是有些不适应,主要体现在库的使用,我的感觉是如果对库有深入的了解才能写出高质量的代码。

时间: 2024-10-09 13:08:30

C语言、Java两种方式下的——规定范围内不重复随机数的相关文章

CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking)

CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking) 我在(Modern OpenGL用Shader拾取VBO内单一图元的思路和实现)记录了基于Color-Coded-Picking的拾取方法. 最近在整理CSharpGL时发现了一个问题:我只解决了用glDrawArrays();渲染时的拾取问题.如果是用glDrawElements();进行渲染,就会得到错误的图元. 本文就彻底解决这个拾取的问题.

ios给NSMutableDictionary循环赋值的两种方式,在循环内初始化NSMutableDictionary和在循环外初始化NSMutableDictionary有何区别?(已解决)

NSMutableArray * arrayName = [NSMutableArray array]; NSMutableArray * array = [NSMutableArray array]; [array removeAllObjects]; for (int i = 0; i< 10; i++) { NSString * str = [NSString stringWithFormat:@"name%i",i]; [arrayName addObject:str];

Oracle并行更新的两种方式(merge/update内联视图)

对于Oracle的两表联合更新的场景(有A.B两表,以A.id=B.id关联,根据B表中的记录更新A表中的相应字段),一般有update内联视图和merge两种方式,下面举例介绍:   创建用例表: create table test1(id number(10),name varchar2(20)); create table test2(id number(10),name varchar2(20));   测试数据: begin insert into test1 values(1,'A'

【C语言】两种方式实现冒泡排序算法

题目要求 编写一个C语言程序,实现基本的冒泡排序算法. 算法 冒泡排序,用一句话来总结: 一组数中,相邻的两个数进行比较.交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序 要想对N个数字进行排序,循环N次即可. 如果真的不理解冒泡排序算法,请点击:冒泡排序_360百科 核心代码 //方式一:从头向尾遍历,将最大数(相对)沉入尾部(相对) void BubbleSort1(int *arr,int sz){ int i = 0; int j = 0; assert(arr); for(i

Java 两种方式实现Token校验

方法一:AOP 代码如下定义一个权限注解 [java] view plain copy package com.thinkgem.jeesite.common.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Targe

C语言中两种方式表示时间日期值time_t和struct tm类型的相互转换

使用gmtime函数或localtime函数将time_t类型的时间日期转换为structtm类型: 使用time函数返回的是一个long值,该值对用户的意义不大,一般不能根据其值确定具体的年.月.日等数据.gmtime函数可以方便的对time_t类型数据进行转换,将其转换为tm结构的数据方便数据阅读. gmtime函数的原型如下: struct tm *gmtime(time_t*timep); localtime函数的原型如下: struct tm *localtime(time_t*tim

多线程实现Thread.Start()与ThreadPool.QueueUserWorkItem两种方式对比

Thread.Start(),ThreadPool.QueueUserWorkItem都是在实现多线程并行编程时常用的方法.两种方式有何异同点,而又该如何取舍? 写一个Demo,分别用两种方式实现.观察各自的现象. 一个WorkMan class,其内的method doSomething()是每次异步线程调用的方法.该方法只是随机的让线程休眠一段时间. 1 public void doSomething() 2 { 3 OnBegin(new EventArgs()); 4 5 // some

Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权.因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去.因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,并进入挂起状态.然后等待消费者消费了商品,然后消费者通知生产者队列有空间了.同样地,当

springmvc和servlet下的文件上传和下载(存文件目录和存数据库Blob两种方式)

项目中涉及了文件的上传和下载,以前在struts2下做过,今天又用springmvc做了一遍,发现springmvc封装的特别好,基本不用几行代码就完成了,下面把代码贴出来: FileUpAndDown.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"%> <html> <head> <title>using commons Uplo