C语言-扫雷
C语言-扫雷新建工程项目文件,按照项目需求拆分成以下三个文件:
test.c 扫雷游戏的测试game.c 游戏的函数实现game.h 游戏的函数声明
首先同C语言-井字棋一样先完善游戏主体菜单逻辑,为了实现游戏可以不断进行下一轮,我们采用do……while循环,与上节思想类似,当input输入为1的时候,while进入下一轮循环(即下一轮游戏)。
首先定义一个简易的菜单函数menu,当输入为1的时候,运行游戏,当输入为其他值时,重新选择并给出错误提示。当输入为0时,退出游戏。
123456789101112131415161718192021222324252627282930#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>void menu() { printf("**********************\n"); printf("****** 1.play ******\n"); printf("****** 0.exit ******\n" ...
LeetCode(三)
LeetCode75 Day3
151.反转字符串中的单词给你一个字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
示例 1:
12输入:s = "the sky is blue"输出:"blue is sky the"
示例 2:
123输入:s = " hello world "输出:"world hello"解释:反转后的字符串中不能存在前导空格和尾随空格。
示例 3:
123输入:s = "a good example"输出:"example good a"解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。
提示:
1 &l ...
LeetCode75(二)
LeetCode75 Day2
1431.拥有最多糖果的孩子给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。
对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。
示例 1:
12345678输入:candies = [2,3,5,1,3], extraCandies = 3输出:[true,true,true,false,true] 解释:孩子 1 有 2 个糖果,如果他得到所有额外的糖果(3个),那么他总共有 5 个糖果,他将成为拥有最多糖果的孩子。孩子 2 有 3 个糖果,如果他得到至少 2 个额外糖果,那么他将成为拥有最多糖果的孩子。孩子 3 有 5 个糖果,他已经是拥有最多糖果的孩子。孩子 4 有 1 个糖果,即使他得到所有额外的糖果,他也只有 4 个糖果,无法成为拥有糖果最多的孩子。孩子 5 有 3 个糖果,如果他得到至少 2 个额外糖果,那么他将成为拥有最多糖果的孩子。
示 ...
LeetCode75(一)
LeetCode75 Day1
1768.交替合并字符串给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。
返回 合并后的字符串 。
示例 1:
123456输入:word1 = "abc", word2 = "pqr"输出:"apbqcr"解释:字符串合并情况如下所示:word1: a b cword2: p q r合并后: a p b q c r
示例 2:
123456输入:word1 = "ab", word2 = "pqrs"输出:"apbqrs"解释:注意,word2 比 word1 长,"rs" 需要追加到合并后字符串的末尾。word1: a b word2: p q r s合并后: a p b q r s
示例 3:
123456输入:word1 ...
C语言-三子棋(井字棋)
C语言-三子棋(井字棋)
三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏分为双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线就视为胜利,而对方就算输了,但是三子棋在很多时候会出现和棋的局面。
我们按照项目需求拆分成以下三个文件:
main.c 测试游戏的逻辑
game.h 关于游戏相关的函数声明、符号声明以及头文件
game.c 游戏相关函数的实现
可以参考上一篇游戏文章“猜数字”,为了实现游戏可以不断进行下一轮,我们采用do……while循环,与上节思想类似,当input输入为1的时候,while进入下一轮循环(即下一轮游戏)。
首先定义一个简易的菜单函数menu,当输入为1的时候,运行游戏,当输入为其他值时,重新选择并给出错误提示。当输入为0时,退出游戏。代码逻辑和上一篇游戏文章“猜数字”相同:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748/*******main.c*********/#defin ...
函数练习-3
递归与迭代接上一篇 “函数练习-2” ,继续探讨函数递归问题。
上一篇我们了解了什么是递归,和递归的基本思想:把规模大的问题转化为规模小的相似的子问题来解决。
那么,什么是迭代呢?
迭代(iteration):重复反馈过程的活动,每一次迭代的结果会作为下一次迭代的初始值。(A重复调用B)。(aka:重复执行一系列运算步骤,从前面的量依次求出后面的量的过程。此过程的每一次结果,都是由对 前一次所得结果 施行相同的运算步骤 得到的)
迭代不一定是循环,循环是迭代的一种方式。
练习3: 求n的阶乘。(不考虑溢出)在“循环练习-1”中有讨论求n的阶乘的问题,在当时我们选择的是通过一个for循环来进行求解:
1234for (int i = 1; i <= n; i++){ temp = temp * i;}
那么我们有没有可能通过递归的思想来求解呢?
其实很简单,不考虑溢出(stack overflow)的情况下,很容易有以下代码:
12345678910111213141516171819#define _CRT_SECURE_NO_WARNINGS#incl ...
函数练习-2
函数递归什么是递归?
程序调用自身的编程技巧称为递归(recursion)。递归做为一种算法在程序设计语言中广泛应用。
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
递归的主要思考方式在于: 把大事化小
例如:
1234567#include <stdio.h>int main(){ printf("test\n"); main(); return 0;}
比如,main函数也是一个函数,main函数自己调用自己,这就是一个递归,程序会一直打印“test”,但是会不会无限制打印类似死循环呢?答案是不会,为什么呢?就要看一下递归的两个必要条件。
递归的两个必要条件
存在限制条件,当满足这个限制条件的时候,递归便不再继续。
每次递归调用之后越来越接近这个限制条件。
所以说,如果不满足递归的两个必要条件,可能会造成程序栈溢出(stac ...
函数练习-1
哔哩大学计算机学院-C语言编程2023-P45练习https://www.bilibili.com/video/BV1cq4y1U7sg
判断素数
写一个函数可以判断一个数是不是素数。
由上一篇,循环练习-2 中我们可以知道素数的基本判断思路:
在一般领域,对正整数n,如果用2到√n之间的所有整数去除,均无法整除,则n为质数。
则可以根据这一思路以及上一篇的代码写出如何判断素数的代码:
123456789101112131415161718192021222324#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <math.h>int main(){ int num = 0; scanf("%d", &num); int j = 0; // 用于嵌套循环,存放2到√n之间的所有整数 int flag = 0; for (j = 2; j <= sqrt(num); j++) { if (num % j == 0) { f ...
循环练习-2
哔哩大学计算机学院-C语言编程2023-P41-P43练习https://www.bilibili.com/video/BV1cq4y1U7sg
求最大公约数给定两个数,求这两个数的最大公约数,例如:输入20、40,输出20。
首先有一个思路,求最大公约数可以怎么样呢?
因为是最大的公约数,我们是不是可以从上往下求,比方说设置一个中间变量tmp,令tmp的值为输入的两个数中的最大的那个数值,当tmp不能被两个数整除的时候,就往下减1,直至tmp可以同时被两个数整除,即%后余0,即为最大公约数。
1234567891011121314151617181920#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main(){ int m = 0; int n = 0; int tmp = 0; scanf("%d%d", &m, &n); tmp = m > n ? m : n; // 三目运算符,如果m>n则m赋值给tmp,否之赋值n给tmp while (1) & ...
C语言-猜数字小游戏
C语言-猜数字小游戏先确定要实现的目标需求,写一个猜数字游戏。
1.生成一个1 - 100之间的随机数。
2.输入数字进行猜数字。
a.猜对了,提示“恭喜猜中了”,游戏结束。
b.猜错了,提示数字猜的大了,还是猜的小了,继续猜,直到猜对为止。
3.游戏结束后可以进行下一轮继续猜,除非选择退出游戏。
首先在main()函数中写出大致的框架:
123456789101112131415161718192021222324int main(){ int input = 0; do { menu(); // 打印游戏菜单 printf("请选择:>", input); scanf("%d", &input); switch (input) { case 1: printf("猜数字\n"); game(); break; case 0: printf("退出游戏\n"); break; defaul ...