精华内容
下载资源
问答
  • C语言实现1到100简单猜数字游戏

    万次阅读 多人点赞 2019-01-26 11:18:54
    这里我们约定 1表示玩游戏,0表示退出游戏。 那么怎么才能让系统随机生成一个数字呢?这里我们想到一个函数:rand()函数。 通过查阅MSDN软件我们可以看到rand()函数是一个返回值为int型的无参函数 ,而其返回的...

    猜数字游戏就是系统随机生成一个数字,我们来猜的游戏。

    这里我们约定 1表示玩游戏,0表示退出游戏。

    那么怎么才能让系统随机生成一个数字呢?这里我们想到一个函数:rand()函数

    通过查阅MSDN软件我们可以看到rand()函数是一个返回值为int型的无参函数 ,而其返回的是0到RAND_MAX的一个随机整数。

    那么RAND_MAX是多大呢?

    在编程软件如VS2013中查看RAND_MAX的定义我们可以看到其是一个十六进制数

     将0x7fff通过程序员计数器转化为十进制得32767

    那么此时我们知道rand()函数返回的是0到32767的一个随机整数。此时系统随机生成数字的难题解决了。可是会发现该函数返回的整数可以大到上万,无疑猜数字的时候会有很大困难。

    为了让猜数字游戏变得简单有趣,我们可以让其产生0到100的随机数。那么怎么才能让rand()函数产生0到100的随机整数呢? 

    可以发现让rand()函数直接产生0到100的整数是不可能的。又因为任何一个数除以100的余数总是在0到99之间,所以只要让rand()的返回值模上100,便可随机产生0到100的整数。

    此时通过下述代码将系统生成的随机整数打印出来我们可以发现,生成的整数确实是随机的。但是当再一次运行程序的时候,我们会惊讶地发现此次运行程序所生成的随机数跟上一次运行程序所生成的随机数一模一样。这是为什么呢?

    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdlib.h>
    #include <stdio.h>
    void menu()
    {
    	printf("********************************\n");
    	printf("**********  1. play  ***********\n");    //输入1,表示玩游戏
    	printf("**********  0. exit  ***********\n");    //输入0,表示退出游戏
    	printf("********************************\n");
    }
    
    int main()
    {
    	int input = 0;
    	do{
    		menu();    //打印菜单
    		printf("请选择:");
    		scanf("%d", &input);
    		int ret = rand() % 100;
    		switch (input)
    		{
    		case 1:
    			printf("%d\n", ret);   //打印生成的随机整数
    			break;
    		case 0:
    			printf("退出游戏\n");
    			break;
    		default:
    			printf("输入错误,请重新输入\n");
    			break;
    		}
    	} while (input);
    	system("pause");
    	return 0;
    }

    这是因为在调用rand()函数前,我们并没有设置随机生成的开始点。所以在调用rand()函数前,我们应该使用srand()函数设置随机生成数的开始点。那么srand()函数又是什么函数呢?

    再次查阅MSDN软件我们可以知道srand()函数是一个无返回值的参数为无符号整数的一个函数,其作用就是设置一个随机数的开始点。那么只要该函数的参数在变化,便可达到生成随机数的效果。

    所以现在需要做的就是给srand()函数传一个时刻在变化的参数。我们发现电脑上的时间一直在改变,用它作为该函数的参数刚好合适。那么此时又引出了一个时间函数--->time()函数

    可以发现time()函数是一个返回值为time_t类型的参数为指针类型的函数,其作用就是返回系统时间。

    那么time_t类型又是什么类型呢?再次将其转到定义我们可以发现time_t是一个__time64_t类型,而__time64_t又是一个整型。

     所以time()函数返回的是当前程序执行时的时间点与计算机起始时间(1970年1月1日零时零分零秒)之间的差值。将该差值作为srand()函数的参数时需要将其强转成unsigned int类型。此时由于我们只关心time()函数的返回值,而并不在意其参数,所以可以将time()函数的参数设置为一个空指针(NULL)。

    到这里我们便可以调用srand()函数和rand()函数了。

    srand((unsigned int)time(NULL));    //设置随机生成数的开始点
    rand()%100;    //生成随机数

    但是此时如果执行下述代码我们会发现,其实生成的随机数并不是那么随机。

    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    void menu()
    {
    	printf("********************************\n");
    	printf("**********  1. play  ***********\n");
    	printf("**********  0. exit  ***********\n");
    	printf("********************************\n");
    }
    
    int main()
    {
    	int input = 0;
    	do{
    		menu();
    		printf("请选择:");
    		scanf("%d", &input);
    		srand((unsigned int)time(NULL));
    		int ret = rand() % 100;
    		switch (input)
    		{
    		case 1:
    			printf("%d\n", ret);
    			break;
    		case 0:
    			printf("退出游戏\n");
    			break;
    		default:
    			printf("输入错误,请重新输入\n");
    			break;
    		}
    	} while (input);
    	system("pause");
    	return 0;
    }

    这是因为每玩一次游戏都会重新设置一次随机生成起点,导致每次生成的起点都很接近。如果在程序执行时只设置一次随机生成起点,此时生成的随机数便会更随机。所以将srand()函数放在do{}while();循环之前便可实现。具体实现代码如下:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
    #include <windows.h>
    #include <time.h>
    //猜数字游戏(0-100)
    void game()
    {
    	int ret = rand()%100;   //rand():返回0到0x7FFF中的整数  
    	int cmp = 0;     //用户猜的数字
    	while (1)
    	{
    		printf("请猜数字:");
    		scanf("%d", &cmp);
    		if (cmp > ret)
    		{
    			printf("猜大了\n");
    		}
    		else if (cmp < ret)
    		{
    			printf("猜小了\n");
    		}
    		else
    		{
    			printf("恭喜你,猜对了\n");
    			break;
    		}
    	}
    }
    void menu()
    {
    	printf("********************************\n");
    	printf("**********  1. play  ***********\n");
    	printf("**********  0. exit  ***********\n");
    	printf("********************************\n");
    }
    
    int main()
    {
    	int input = 0;
    	srand((unsigned int)time(NULL));
    	do{
    		menu();  //打印菜单
    		printf("请选择:");
    		scanf("%d", &input);
    		switch (input)
    		{
    		case 1:
    			game();   //玩游戏函数
    			break;
    		case 0:
    			printf("退出游戏\n");
    			break;
    		default:
    			printf("输入错误,请重新输入\n");
    			break;
    		}
    	} while (input);   
    	system("pause");
    	return 0;
    }
    

     

    展开全文
  • 【16】一个计数器计数到100,在每个数字之间暂停1秒,每隔10个数字输出一个字符串。 public class MyThread extends Thread{ public void run() { for(int i=0;i&lt;100;i++) { if(i%10==0) { ...

    【16】一个计数器计数到100,在每个数字之间暂停1秒,每隔10个数字输出一个字符串。

    public class MyThread extends Thread{
    	public void run() 
    	{
    		for(int i=0;i<100;i++)
    		{
    			if(i%10==0)
    			{
    				System.out.println("------"+i);
    			}
    			System.out.print(i);
    			try {
    				Thread.sleep(1);
    				System.out.print("    线程睡眠1毫秒!\n");
    			}catch(InterruptedException e){
    				e.printStackTrace();
    			}
    		}	
    	}
    	public static void main(String[] args) {
    		new MyThread().start();
    	}
    }
    

    在这里插入图片描述

    展开全文
  • C语言猜数字游戏(1-100)

    千次阅读 2019-03-26 00:05:48
    完成1-100之间的猜数字游戏 相关的知识点: 计算机的随机数是通过算法返回一组看起来随机的数列 称为 伪随机 计算机生成随机数依赖数学变化,需要初始值 初始值就是随机种子 如果初始值是固定的那么生成的数字也就是...

    完成1-100之间的猜数字游戏

    相关的知识点:

    计算机的随机数是通过算法返回一组看起来随机的数列 称为 伪随机数
    计算机生成随机数依赖数学变化,需要初始值
    初始值就是随机种子
    如果初始值是固定的那么生成的数字也就是随机的.
    一个随机种子对应一组序列
    计算机用整数表示时间 时间戳 以1970-1-1 0时0分0秒来计数

    代码讲解
    1.首先定义了一个打印菜单
    2.利用srand((unsigned int)time(NULL)); 函数完成对随机数的刷新产生了一组随机数
    3.随机数在种子中抽取
    4.进入循环判断程序

    程序效果如下
    在这里插入图片描述

    **

    代码如下

    **

    
    #include<time.h>
    #include<stdio.h>
    #include<stdlib.h>
    void game() {
    	int to_findnumber=rand()%100+1;
    	int inputnumber;
    	while(1) {
    	printf("请输入数字:\n");
    	scanf("%d",&inputnumber);
    	  if(inputnumber<to_findnumber) 
    		  printf("猜小了\n");
    	  else if(inputnumber>to_findnumber)
    		  printf("猜大了\n");
    	  else if(inputnumber=to_findnumber){ 
    		  printf("猜对了\n");
    	      break;
    	  }
    	}
    }
    void menu() {
    	printf("-------猜数字游戏-------\n");
    	printf("------------------------\n");
    	printf("-------1.开始游戏-------\n");
    	printf("-------2.离开游戏-------\n");
    	printf("------------------------\n");
    }
    int main() {
        int choice;
    	menu();
    	srand((unsigned int)time(NULL));   
            //强制类型转换,通过时间返回值来获取时间生成随机种子                  
    	//time(),设置时间戳设置随机种子 有符号的64位的整数,返回的是现在的时间
    	//随机种子发生变化,数字就会变化
    	//srand 是一个32位的无符号整数
    	while(1) {
    	printf("输入操作:\n");
    	scanf("%d",	&choice);
    	if(choice==1) {
    	game();
    	}
    	else if(choice==2) {
    		printf("退出游戏!\n");
    		break;
    	}
    	else printf("输入无效,重新输入\n");
    	    continue;
    	}
    	return 0;
    }
    
    展开全文
  • java一亿数字取前100个(3秒钟获取)

    千次下载 热门讨论 2012-05-04 10:36:30
    java一亿数字取前100个(3秒钟获取) 速度非常快。 发出来给大家分享
  • Oracle批量导入100万条数据不到1秒

    万次阅读 2016-12-22 13:48:26
    Oracle 批量导入100万条数据不到1秒

     .Net程序中可以通过ODP调用特性,对Oracle数据库进行操作,今天来讲一下数据批量插入的功能,所用技术不高不深,相信很多朋友都接触过,小弟班门弄斧了,呵呵。这篇文章是上篇文章的续集,因为上一次试验的征集结果没有突破4秒的方法,所以这次继续挑战与挖掘新方法,虽然是Oracle,但仍具有一定收藏意义。

        上一次文章中提及的试验: SqlServer批量导入C#100万条数据仅4秒附源码 http://blog.csdn.net/mrobama/article/details/53813084

    这个试验是针对SQL SERVER数据库的,宿主环境也是.Net,有兴趣的朋友可以将这两个试验对比一下,为日后工作批量导数提供支持。

        另外,一些朋友对上次试验环境有些异议,认为应该对数据库和服务器做优化或设置,以体现试验最终的时间结果。这个固然会影响试验的时间结果,但考虑到在试验环境中,对数据库优化的标准与优化程度不便统一与定量,试验结果也不易说明其影响源,所以这次试验依然以标准数据库建库后的配置为主,试验所在服务器硬件环境与上次试验保持一致。实验目的在于挖掘、对比宿主程序中的数据批量操作方法。

        有新方法提升性能时间指标的朋友,欢迎互相切磋,互相提高,嘴上功夫就免了。。。

        好了正文开始。

        ● 普通肉垫式

        什么叫批量插入呢,就是一次性插入一批数据,我们可以把这批数据理解为一个大的数组,而这些全部只通过一个SQL来实现,而在传统方式下,需要调用很多次的SQL才可以完成,这就是著名的“数组绑定”的功能。我们先来看一下传统方式下,插入多行记录的操作方式:

     

    复制代码
    代码
    //设置一个数据库的连接串, string connectStr = "User Id=scott;Password=tiger;Data Source="; OracleConnection conn = new OracleConnection(connectStr); OracleCommand command = new OracleCommand(); command.Connection = conn; conn.Open(); Stopwatch sw = new Stopwatch(); sw.Start(); //通过循环写入大量的数据,这种方法显然是肉垫 for (int i = 0; i < recc; i++) { string sql = "insert into dept values(" + i.ToString() + "," + i.ToString() + "," + i.ToString() + ")"; command.CommandText = sql; command.ExecuteNonQuery(); } sw.Stop(); System.Diagnostics.Debug.WriteLine("普通插入:" + recc.ToString() + "所占时间:" + sw.ElapsedMilliseconds.ToString());
    复制代码

     

     

        我们先准备好程序,但是先不做时间的测定,因为在后面我们会用多次循环的方式来计算所占用的时间。

        ● 使用ODP特性

        看上面的程序,大家都很熟悉,因为它没有用到任何ODP的特性,而紧接着我们就要来介绍一个神奇的程序了,我们看一下代码,为了更直观,我把所有的注释及说明直接写在代码里:

     

    复制代码
    //设置一个数据库的连接串 string connectStr = "User Id=scott;Password=tiger;Data Source="; OracleConnection conn = new OracleConnection(connectStr); OracleCommand command = new OracleCommand(); command.Connection = conn; //到此为止,还都是我们熟悉的代码,下面就要开始喽 //这个参数需要指定每次批插入的记录数 command.ArrayBindCount = recc; //在这个命令行中,用到了参数,参数我们很熟悉,但是这个参数在传值的时候 //用到的是数组,而不是单个的值,这就是它独特的地方 command.CommandText = "insert into dept values(:deptno, :deptname, :loc)"; conn.Open(); //下面定义几个数组,分别表示三个字段,数组的长度由参数直接给出 int[] deptNo = new int[recc]; string[] dname = new string[recc]; string[] loc = new string[recc]; // 为了传递参数,不可避免的要使用参数,下面会连续定义三个 // 从名称可以直接看出每个参数的含义,不在每个解释了 OracleParameter deptNoParam = new OracleParameter("deptno", OracleDbType.Int32); deptNoParam.Direction = ParameterDirection.Input; deptNoParam.Value = deptNo; command.Parameters.Add(deptNoParam); OracleParameter deptNameParam = new OracleParameter("deptname", OracleDbType.Varchar2); deptNameParam.Direction = ParameterDirection.Input; deptNameParam.Value = dname; command.Parameters.Add(deptNameParam); OracleParameter deptLocParam = new OracleParameter("loc", OracleDbType.Varchar2); deptLocParam.Direction = ParameterDirection.Input; deptLocParam.Value = loc; command.Parameters.Add(deptLocParam); Stopwatch sw = new Stopwatch(); sw.Start(); //在下面的循环中,先把数组定义好,而不是像上面那样直接生成SQL for (int i = 0; i < recc; i++) { deptNo[i] = i; dname[i] = i.ToString(); loc[i] = i.ToString(); } //这个调用将把参数数组传进SQL,同时写入数据库 command.ExecuteNonQuery(); sw.Stop(); System.Diagnostics.Debug.WriteLine("批量插入:" + recc.ToString() + "所占时间:" +sw.ElapsedMilliseconds.ToString());
    复制代码

     

     

        以上代码略显冗长,但是加上注释后基本也就表达清楚了。

        好了,到目前为止,两种方式的插入操作程序已经完成,就剩下对比了。我在主函数处写了一个小函数,循环多次对两个方法进行调用,并且同时记录下时间,对比函数如下:

     

    复制代码
    for (int i = 1; i <= 50; i++) { Truncate(); OrdinaryInsert(i * 1000); Truncate(); BatchInsert(i * 1000); }
    复制代码

     

     

        当数据量达到100万级别时,所用时间依然令人满意,最快一次达到890毫秒,一般为1秒左右。

        经过试验,得出一组数据,可以看出两种方式在效率方面惊人的差距(占用时间的单位为毫秒),部分数据如下:

    记录数

    标准

    批处理

    1000

    1545

    29

    2000

    3514

    20

    3000

    3749

    113

    4000

    5737

    40

    5000

    6820

    52

    6000

    9469

    72

    7000

    10226

    69

    8000

    15280

    123

    9000

    11475

    83

    10000

    14536

    121

    11000

    15705

    130

    12000

    16548

    145

    13000

    18765

    125

    14000

    20393

    116

    15000

    22181

    159

     
    因为篇幅原因,不再粘贴全部的数据,但是我们可以看一下由此数据生成的散点图:

    clip_image002

     

        其中有些数据有些跳跃,可能和数据库本身有关系,但是大部分数据已经能说明问题了。看了这些数据后,是不是有些心动了?

        源程序放了一段时间直接拷贝贴过来了,可能需要调试一下才能跑通,不过不是本质性问题,对了如果要测试别忘记安装Oracle访问组件。

         前人的不断努力,后人的不断学习,珍惜时间快速成长,我们要学会站在巨人的肩膀上!!! http://blog.csdn.net/mrobama
    展开全文
  • 这算是我的第二个javascript程序,今天学了一些关于它的运算法、操作符、逻辑运算、函数、不能被重载、变量申明的作用域、包装类、引用等知识,因内容较多,而且...计算1到100相加的结果 以下将使用javascript
  • 计算当前时间距离1970-1-1 0.0.0的秒数

    千次阅读 2018-11-05 16:06:07
    这个算法来自LINUX的源码,下面带有大神的解析,测试过,只用输入时间,即可得到距离1970-1-1 0:0:0的秒数! Linux源码中的mktime算法解析 我们知道,CMOS中读出来的系统时间并不是time_t类型,而是类似于struct ...
  • 数字电子钟 1Hz 脉冲信号的设计

    万次阅读 2017-05-17 19:14:15
    数字电子钟 1Hz 脉冲信号的设计  [摘 要]要设计数字钟,首先应选择一个能产生稳定的标准时间脉冲信号,而脉冲源产生的脉冲信号的频率较高,因此,需要进行分频,使高频脉冲信号变成适合于计时的低频脉冲...
  • 原路图 //源码 #include #include #define uint unsigned long #define uchar unsigned char ...sbit N2 = P1^1; sbit N3 = P1^2; sbit N4 = P1^3; sbit N5 = P1^4; sbit N6 = P1^5; uchar code
  • 这个算法来自LINUX的源码,... 我们知道,CMOS中读出来的系统时间并不是time_t类型,而是类似于struct tm那样,年月日时分是分开存储的。 那么,要把它转化为系统便于处理的time_t类型,就需要算法进行转换。 ...
  • 天,有个非计算机专业的同学问我,如何快速找出1亿之内的孪生素数——所谓孪生素数,就是差值为2的两个...于是乎,我花了半天时间,尝试了种方式,最终又对代码做了优化,终于在3秒钟内找出了小于1亿的素数表。
  • 1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by step ...
  • 给定数字N,计算0开始N各个位数上有多少个1
  • //题目:有n个人围成一圈,顺序排号,第一个开始报(从1到3报),凡报到3的人退出圈子,问最后最后留下的是原来第号的那位. //提示:用数组完成 #include #define N 100 int fun (int n, int m );//...
  • 100以内的勾股

    千次阅读 2016-11-22 13:22:38
    100以内的勾股,让i从1到100遍历,在用循环去检测是否有两个的平方的和等于i平方 代码 #include #include main() { int i,j,m; for (i=2;i<100;i++) for (j=2;j;j++) { m=sqrt(i*i-j*j); if (m*...
  • 10秒钟脱口而出十位相同两位的乘法一、范围十位相同的两位。二、目标计算两位的相乘。10秒钟脱口而出。三、基本公式以尾数之和展开讨论:假设两个分别是10a+b以及10a+c,那么尾数之和就是b+c。序号分类...
  • 上周旁听了一节小小的学而思数学网课,写一...A走B的动作,我分为5个步,即向右,向右,向右,向上,向上。但是也可以换个顺序,所以我只需要在5个步骤里任意选3个向右就是路径的总数量了, 即 C53C_5^3C53​ ...
  • 为Go语言GC正名-20秒到100微妙的演变史

    万次阅读 多人点赞 2016-07-07 17:09:17
    原文链接:https://blog.twitch.tv/gos-march-to-low-latency-gc-a6fa96f06eb7#.lrmfby2xs 下面我们会介绍https://www.twitch.tv视频直播网站在使用Go过程中的GC耗时演变史。  我们是视频直播系统且拥有...在Go1.4到1.
  • 10秒钟脱口而出两位的平方

    千次阅读 2013-12-21 12:11:39
     三、基本公式序号分类公式举例1个位数小于5(A+d) ²=(A + 2d) A+ d²21²=(20+1)²=22X20+1=441 34²=(30+4)²=38x30+16=1156 83²=(80+3)²=86x80+9=68892个位数等于5(10a+5)²=100(a + 1)a + 2535²=|(3
  • 1.设计界面 2.编写代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using ...
  • 获取1970年11日 00:00:00及标准时间指定时间以来的毫秒,外加获取当天凌晨当前时间的毫秒
  • 首先要说的是电影就是24FPS也不如60FPS的流畅,对比就可以看出来,但是24FPS不会让人觉得卡,甚至12FPS都不会让人觉得卡,而24FPS的游戏能让人很明显的感受卡,12FPS就是幻灯片了,这是为什么呢?有两个原因。  ...
  • js—实现100以内的求和

    千次阅读 2018-08-27 09:36:01
    &lt;script&gt; var sum = 0; for(var i = 1 ; i &lt;= 100; i++){ sum += i; } document.writeln("1~100以内的和为:"+ sum); &lt;/script&gt;  
  • 在Linux下编写一C程序,用于获取当前时间1970年之前某年份的秒数。二、C代码实现/********************************************************************* * 版权所有 (C)2015, Zhou Zhaoxiong。 * * 文件名称:...
  • 51单片机:利用外部中断实现按键按一下数码管数字加1直到加99,另一个按键实现清零 题目要求: 利用外部中断实现按键按一下数码管数字加1,实现00-99的循环,另一个按键实现清零,不管数码管数字是多少,该按键按...
  • 有这样一个函数f(n),对于任意正整数n,它表示 0 n 之间出现“1”的个数,比如 f(1) = 1, f(13) = 6,请列出 1 1234567890 中所有的 f(n) = n 的n, 要求准确快速.相信很多人都能立刻得出以下的解法:for(n:N) ...
  • Loadrunner参数化如何在记事本中将参数值显示超过100个用户参数值 1.loadrunner的参数值没有最大的限度,可以修改C:\Program Files\HP\L...
  • 计算1970距今的秒数

    千次阅读 2017-07-10 19:41:06
    第一种方法,可以直接使用date命令获取 date +%s -d '2017-1-1 12:30:00' 值得注意的是,这个秒数带了时区计算,所以得额外判断时区 ...= 0) || (y) % 400 == 0)/* 计算某个日期距1970年11日0时0分0秒数 */ ti
  • 普中51开发板倒计时100秒

    千次阅读 2019-01-21 16:42:45
    用定时器设计一个以间隔 1s 100 0 的计数器,在数码管上显 示。当数码管上的数字减 0 时,蜂鸣器发出警报。 原理图 算法设计 利用138译码器选择数码管引进(8进制) 倒计时:通过定时器精确计算1s,然后...
  • 原题如下, 斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、11、2、3、5、8、13、...斐波纳契数列都有直接的应用,为此,美国学会1960年代起出版了《斐波纳契数列》季刊,专门刊载这方面的研究成果。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 421,478
精华内容 168,591
关键字:

从1数到100需要几秒