珠玑妙算-C语言小游戏_珠玑妙算游戏_...404 Not Found的博客-程序员宝宝

技术标签: C语言  c语言  蓝桥杯  开发语言  

 

目录

一、宏常量定义及头文件引用

二、不同数的生成

三、输入校验

四、结果判断

五、结果打印

六、main函数主体


珠玑妙算是更加复杂的猜数游戏,原版是猜四个数字,每个数字均不相同,其实现如下

一、宏常量定义及头文件引用

为了使待猜数字位数可变,可以使用宏常量来定义

#define _CRT_SECURE_NO_WARNINGS //防止scanf报错
#include<time.h>
#include<ctype.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NUMSIZE 3 //设置猜的数字个数,不超过9

二、不同数的生成

这里要使每个都不同,就需要巧妙的函数设计

//设置定义位数的各不相同的数字
void setnum(int*x)
{
	int i, j, val;
	for (i = 0; i < NUMSIZE; i++)
	{
		do {
			val = rand() % 10;//先生成一个随机数
			for (j = 0; j < i; j++)
				if (val == x[j]) //如果随机值与数组中已有的值存在相同的,则重新取值
					break;
		} while (j < i);
		x[i] = val; //将取得的值赋给数组
	}
}

三、输入校验

对用户的输入进行检验,提示相应的报错信息。

//检查输入是否有效
int check(const char *s)
{
	if (strlen(s) != NUMSIZE) //输入个数不够
		return 1;
	for (int i = 0; i < NUMSIZE; i++)
	{
		if (!isdigit(s[i])) //存在非数字字符
			return 2;
		for (int j = 0; j < i; j++) //存在相同数字
			if (s[i] == s[j])
				return 3;
	}
	return 0;
}

四、结果判断

//结果判断
void judge(const char*s, const int*n, int*x, int*y)
{
	*x = *y = 0; //x,y 分别代表位置及数字均正确的个数,数字正确但位置不正确的数字的个数
	for (int i = 0; i < NUMSIZE; i++)
	{
		for (int j = 0; j < NUMSIZE; j++)
		{
			if (s[i] == '0' + n[j]) //将数字转化为字符数字并比较
				if (i == j) //对位置进行比较
					(*x)++;
				else
					(*y)++;
		}
	}
}

五、结果打印

这里需要讨论的是,一个数,如果值对了,位置没对,则x不变,y自加,如果都对x自加,所以x,y的和代表所含有答案数字的个数。

void print(int num,int pos) //num是上一函数中提到的x,y的和,pos指x
{
	if (pos == NUMSIZE) 
		printf("回答正确!!");
	else if (num == 0) 
		printf("这些数字里没有答案。");
	else
	{
		printf("这些数字里包括%d个答案数字。\n", num);
		if (pos == 0)
			printf("但是数字的位置都不一致。");
		else
			printf("其中有%d个数字的位置是一致的。", pos);
	}
	printf("\n");
}

六、main函数主体

int main()
{
	int time_n = 0; //尝试次数
	int check_r;    //检验返回值
	int x;         //位置及数字均正确的个数
	int y;		//数字正确但位置不正确的数字的个数
	int*n = (int*)malloc(sizeof(int)*NUMSIZE); //存储要猜的数字
	char buff[10]; //存储用户输入的字符
	clock_t begin, end; //设置时间起始,用于计时

	srand((unsigned int)time(NULL)); //时间戳

	printf("# 欢迎游玩珠玑妙算。\n");
	printf("# 请猜%d个数字。\n",NUMSIZE);
	printf("# 其中不包含相同数字。\n");
	printf("# 对于3个数的,请向123这样连续输入数字。\n");
	printf("# 不能输入空格字符。\n");

	setnum(n);

	begin = clock();

	do {
		do {
			printf("请输入: ");
			scanf("%s", buff);

			check_r = check(buff);

			switch (check_r) //根据返回值做相应错误提示
			{
			case 1:printf("\a请确保输入四个数字。\n"); break;
			case 2:printf("\a请不要输入除了数字以外的字符。\n"); break;
			case 3:printf("\a请不要输入相同的数字。\n"); break;
			}
		} while (check_r != 0);
		time_n++;
		judge(buff, n, &x, &y);
		print(x+y, x);
	} while (x < NUMSIZE);

	end = clock();

	printf("用了%d次。\n用时%.lf秒。\n",
		time_n, (double)(end - begin) / CLOCKS_PER_SEC);//算出所用秒数,这是time.h中的宏定义常量,可用来转化为秒数。
	return 0;
}

看到这儿,还不支持一下博主

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qwer1234mnbv_/article/details/124968424

智能推荐

94.SpringCloud(初级二):Eureka修改服务主机名,服务发现,自我保护机制_鹏哥哥啊Aaaa 的博客-程序员宝宝

说明:Eureka了解即可,新项目不建议用EurekaEureka修改服务主机名,服务发现,自我保护机制

计算机图形学往年试题,计算机图形学试题及答案完整版.doc_weixin_39563420的博客-程序员宝宝

计算机图形学试题及答案完整版.doc (11页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.90 积分名词解释将图形描述转换成用像素矩阵表示的过程称为扫描转换。1.图形2.像素图3.参数图4.扫描线5.构造实体几何表示法6.投影7.参数向量方程8.自由曲线9.曲线拟合10.曲线插值11.区域填充12.扫描转换三、填空 1.图形软件的建立方法包括提...

python制作词云图_python词云孙悟空文件_刘小航9527的博客-程序员宝宝

介绍个高大上的玩意:词云图下面教大家如何制作词云图,代码很简单:先给出代码:import jiebafrom wordcloud import WordCloud, ImageColorGeneratorfrom matplotlib import pyplot as pltfrom PIL import Imageimport numpy as npwith open(...

一张图带你彻底了解CAS_写好每一个BUG的博客-程序员宝宝

什么是CASCAS(compare and swap或者compare and exchange):比较并且替换。直接上图下面解释一下具体的执行流程假设有一个线程A拿到内存中的一个整数N,并对这个N进行加1操作。当执行完计算后,重新放入内存中时,首先会再次从内存中拿出N和之前拿出的N进行比较,如果两次取出的N值相同,则把计算完成的新值放入内存中;如果不同,则使用新值N重新计算,然后放入内存中之前,重复以上比较操作,直到前后两次获得的N值相同,然后写入内存中。对于上面的.

YARN总结_aaaa-299840-yulrn_Biubiubiu!!的博客-程序员宝宝

觉得有帮助的,请多多支持博主,点赞关注哦~文章目录Yarn一、Yarn 概述二、Yarn 基本架构三、Yarn 工作机制四、作业提交全过程五、资源调度器1、先进先出调度器(FIFO)2、容量调度器(Capacity Scheduler)3、公平调度器(Fair Scheduler)六、任务的推测执行1、作业完成时间取决于最慢的任务完成时间2、推测执行机制:3、执行推测任务的前提条件4、不能启用推...

ORACLE数据导出工具sqluldr2在linux下的安装及使用_sqluldr2安装_有点自然卷的博客-程序员宝宝

1.下载sqluldr2压缩包,并解压(只有一个.bin文件);2.将sqluldr2的.bin文件复制到oracle安装目录下的bin文件中,为便于使用可自行重命名,如sqluldr2.bin;3.修改环境变量:    export   LD_LIBRARY_PATH=$ORACLE_HOME/bin:$ORACLE_HOME/lib:/lib:/usr/lib    修改后执行...

随便推点

设计模式:原型模式与享元模式_享元模式和原型模式_邋遢的流浪剑客的博客-程序员宝宝

一、原型模式原型模式是通过给出一个原型对象来指明所创建的对象的类型,然后使用自身实现的克隆接口来复制这个原型对象,该模式就是用这种方式来创建出更多同类型的对象原型模式是在内存二进制流的拷贝,要被直接new一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点1、实现原型模式//实现Cloneable接口的原型抽象类Prototypepublic clas...

UML各种图总结-精华_ibm类图是写在用例视图还是逻辑视图_Chasel IBM的博客-程序员宝宝

 UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。下面将对UML的九种图+包图的基本概念进行介绍以及各个图的使用场景。一、基本概念    如下图所示,UML图分为用例视图、设计视图、进程视图、实现视图和拓扑视图,又可以静动分为静态视图和动态视图。静态图分为:用例图,类图,对象图,包图,构...

牛客网 21天 3.2表达式求值_cycy小陈的博客-程序员宝宝

今天上课,老师教了小易怎么计算加法和乘法,乘法的优先级大于加法,但是如果一个运算加了括号,那么它的优先级是最高的。例如: 1 2 3 4 1+2*3=7 1*(2+3)=5 1*2*3=6 (1+2)*3=9 现在小易希望你帮他计算给定3个数a,b,c,在它们中间添加&quot;+&quot;, &quot;*&quot;, &quot;(&quot;, &quot;)&quot;符号...

cocosStudio和cocos2d-x版本对应_Ruby丫丫的博客-程序员宝宝

版本对应列表: Studio2.x CocosStudio版本对应Cocos2d-x版本JS版本  备注v2.1.5 v2.1.2beta v2.1 (事件:更名Cocos) v3.4finalv3.3 rc0+Cocos新增JSON格式导出,Cocos2d-JS仅支持此格式v2.1betav3.4beta0不

CodeForces 580B Kefa and Company_Calm微笑的博客-程序员宝宝

L - Kefa and CompanyTime Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64uSubmit StatusDescriptionKefa wants to celebrate his first big salary by going to re

推荐文章

热门文章

相关标签