首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++经典算法题-数字拆解

31.Algorithm Gossip: 数字拆解 说明 这个题目来自于 数字拆解,我将之改为C语言的版本,并加上说明。...2 = 3 + 1 + 1 = 2 + 2 + 1 = 2 + 1 + 1 + 1 = 1 + 1 +1 +1 +1 共七种 依此类推,请问一个指定数字NUM的拆解方法个数有多少个?...解法 我们以上例中最后一个数字5的拆解为例,假设f( n )为数字n的可拆解方式个数,而f(x, y)为使用y以下的数字来拆解x的方法个数,则观察: 5 = 4 + 1 = 3 + 2 = 3 + 1...y)),其中n为要拆解的数字,而min()表示取两者中较小的数。...接下来就开始一个一个进行拆解了,如果数字为NUM,则我们的阵列维度大小必须为NUM x (NUM/2+1),以数字10为例,其维度为10 x 6我们的表格将会如下所示: 1 1 0 0 0 0 1 1

1.2K00

数字黑洞 C语言

题目 给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。...一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。...现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。 输入格式: 输入给出一个 (0,104) 区间内的正整数 N。...输出格式: 如果 N 的 4 位数字全相等,则在一行内输出 N - N = 0000;否则将计算的每一步在一行内输出,直到 6174 作为差出现,输出格式见样例。注意每个数字按 4 位数格式输出。...[0]=c/1000; n[1]=c/100%10; n[2]=c/10%10; n[3]=c%10; for(i=0;i<3;i++) for(j=0;j<3;j++)

25210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    数字分类 C语言

    给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A1​ = 能被 5 整除的数字中所有偶数的和; A2​ = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1​−n2​...+n3​−n4​⋯; A3​ = 被 5 除后余 2 的数字的个数; A4​ = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位; A5​ = 被 5 除后余 4 的数字中最大数字。...每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数。数字间以空格分隔。...输出格式: 对给定的 N 个正整数,按题目要求计算 A1​~A5​ 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。 若分类之后某一类不存在数字,则在相应位置输出 N。...,后来经过各种问题排查,发现了输入的第一个数字是分类数字的数目。

    18110

    C语言——猜数字游戏

    一,游戏要求: 1,电脑自动生成1~100的随机数 2,玩家猜数字,总共五次机会,猜数字过程中,根据猜测数字的大小给出“猜大了”或“猜小了”的反馈,若猜对了则成功,若五次没猜出,则失败。...: ① 函数rand(头文件是:stdlib.h): 这是C语言提供的,一个可以生成随机数的函数 但是:rand 是对于一个叫“种子”的基准值进行运算生成随机数的,生成的是伪随机数,如果我们不改变“种子...”的基准值,那么,面对相同的种子,rand就会生成相同的随机数。...rand函数之前先调用 srand 函数,通过 srand 函数的参数 seed 来设置 rand 函数生成随机数时的种子,所以我们只需要让srand中的 seed 变化,就可以实现 rand 生成的随机数的变化...因为 time 所返回的时间差是随时间流失变化的,所以我们只需将 time函数返回的时间差,作为seed,就可以实现seed的改变。

    19710

    【C语言】猜数字游戏

    前言 前面学习的这些知识,我们就可以写一些稍微有趣的代码了,这里就来写一个猜数字游戏。...游戏要求: 电脑自动生成1~100的随机数 玩家猜数字,猜数字的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束 1....1.1 rand C语言提供了一个函数叫rand,这函数是可以生成随机数的,函数原型如下: int rand (void); rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间...1.2 srand C语言中又提供了一个函数叫srand,用来初始化随机数的生成器的,srand的原型如下: void srand (unsigned int seed); 程序中在调用rand函数之前先调用...在C语言中有一个函数叫time,就可以获得这个时间,time函数原型如下: time_t time (time_t* timer); time函数会返回当前的日历时间,其实返回的是1970年1月1日0时

    8910

    C语言——猜数字游戏

    前言: 今天我分享一个小游戏给大家,相信大家都玩过这样一款游戏,给你一个1-100的随机数字,假定给的数字为36,我猜60,就提示猜大了,又接着猜,我猜50,显示猜大了,我猜30显示猜小了.....就这样不断的猜下去...今天我们依靠C语言看看怎么实现这么一个小游戏。...打印一个最基本的游戏界面,输入0,退出游戏,输入1,进入游戏,再写关于游戏的代码,输入其他数字,提示请重新选择。...void game() { //生成一个随机数得借助rand函数 //单纯使用rand函数每次游戏生成的数字是伪随机数,都是一样的数字 //并且rand函数生成的范围为0-32767...因为rand函数的范围为0-32767,所以生成1-100的数字只需要rand()%100+1即可 int guess; while (1) { printf("请猜数字>:"); scanf

    7700

    C语言:猜数字游戏

    思考: 要想完成猜数字游戏,首先得生成随机数字。 目录 1.1 rand 1.2 srand 1.3 time 1.4 设置随机数的取值范围 2....猜数字游戏的代码实现 1.1 rand C语言提供了一个函数叫rand,这个函数可以生成随机数。这个函数包含在头文件:stdlib.h 中。...下面对rand函数进行几组测试: 从程序运行的结果中,我们可以得出,每次产生的数字之间是相对随机的,但是每次产生的随机数是一模一样的,这其实就是所说的伪随机数。...1.2 srand C语言中又提供了一个函数叫srand,用来初始化随机数的生成器。...//限制猜数字的次数 int count = 5; printf("请猜数字:\n"); while (count) { printf("你还有%d次机会\n", count); scanf

    13010

    使用c语言编写猜数字

    要求:1自动产生一个1-100之间的数           2猜数字               a:猜对了,恭喜你游戏结束                b:你猜错了,会告诉猜大了,还是猜小了,然后继续猜...           3游戏一直玩,除非退出游戏 解答:        通过分析我们可以知道这个题难点在于1:生成随机数(1-100的范围只要将生成的随机数%100+1就可以了。...2循环语句的搭建,这里的大循环是是否开始游戏,要做出选择然后再决定循环 那么do while循环语句明显是个好选择  。那么接下来我们开始搭建; 1既然是游戏,菜单还是要有的。...所以我们将时间戳放进去(时间戳百度自行搜所)time函数与srand所需要的类型不同所以我们强制转换类型 当这里srand放在game中会按时间改变如果按得快还是一样,所以我们把他放到main()中...然后就是猜数字的过程使用 if else函数就可以了  最终我们得到以下函数

    12410

    C语言解题之小鱼的数字游戏

    小Bob发现洛谷的题集发生了变化哈,应该是增加了不少新题,于是就去随机写了一题,现分享出来: 题目描述 ‍‍小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字a以i为底(长度不一定,以 00 结束...),记住了然后反着念出来(表示结束的数字 00 就不要念出来了)。...这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。 ‍‍‍‍‍‍输入格式 一行内输入一串整数,以 00 结束,以空格间隔。...23 65 3 ‍‍ ‍‍‍‍‍‍ 源代码如下: #include #define m 100 int main() { int a[m], n, k[m], b, c;...= n; for (b = 0; b < n; b++) { c--; k[b] = a[c]; } for (n = 0; n < b; n++

    2.2K30

    【C语言刷题系列】消失的数字

    一、问题描述 问题的要点: 数组中存储了0到n的数字,但缺失了一个 数组是无序的 时间复杂度要求 O(n) 二、解题思路 题目要求时间复杂度为O(n) 如果用暴力解法:先将数组排序,再对数组每个元素与相邻元素进行比对的方法...,受制于排序的时间复杂度至少为O(nlogn),所以这种方法是行不通的 方法一:求和做差 对时间复杂度优化 先将0到n相加求和,再将数组元素求和,两个结果作差就是缺失的数字 用两个循环求和,时间复杂度为...O(n) 该算法可以进一步优化: 0到n求和可以使用等差数列求和的公式( (首项+尾项)*项数/2),直接求出结果 不过时间复杂度已不能进一步降低了 方法二:异或 相加求和的方法,对于数组元素较大的情况...,无法正确处理 这里使用异或的方法来解决—— 将数组每个元素异或一遍,再跟0到n依次异或,得到的结果就是缺失的数字 (原理是任意两个相同的数字异或,结果为0;0与任何数字异或,结果是该数字本身)...时间复杂度为O(n) 三、C语言代码实现 方法一实现: int missingNumber1(int* nums, int numsSize) { int sum1 = (0 + numsSize

    8010

    C语言题解 | 消失的数字&轮转数组

    前言 在 数据结构 | 时间复杂度与空间复杂度 一文中,分享了两个和复杂度相关的例题,现在就来给大家分享下这两个题的多种解法 题目链接 消失的数字 轮转数组 ---- 正文 题目一、消失的数字 先看题目...,返回数字 问题貌似解决了,但题目有个要求,时间复杂度要控制在 O(N) 内 用所学的知识分析一波 qsort 的 时间复杂度 是 O(logN*N) 遍历,按最坏的情况判断,时间复杂度...,i 都是目标数 return i; } ---- 思路二 相加相减 ,这个算法比较巧妙,用到了差异的特别之处,举个例子,有数字 1、3 ,其中缺少了数字 2 ,相加后为 4 ,我们将数字 1、2、3...相加得到 6 ,6 - 4 得到的就是缺少的数字 2 了。...原理跟 思路二 差不多,比如有数字 1、3 ,二者异或后,会得到 2 这个数;在把理想数字 1、2、3 ,三者异或后,得到 0,将异或数 2 和异或数 0 再异或一次,得到消失的数字 2,用到了异或运算符的特点

    17120

    C语言教程:逐行读取数字的方法

    C语言教程:逐行读取数字的方法在C语言的编程开发中,经常需要处理字符串或文本文件,并从中提取出数字。本文将介绍逐行读取数字的方法,帮助初学者更好地理解和运用。...C语言 逐行读取数字的方法一、引言数字在计算机编程中扮演着重要的角色,应用广泛。而在处理字符串或文本文件时,需要将其中的数字提取出来,进行计算或其他操作。...三、使用strtol函数strtol函数是C语言中的字符串转整数函数,其功能强大。我们可以使用strtol函数逐行读取数字,并进行错误处理。...四、使用正则表达式正则表达式是一种强大的模式匹配工具,在C语言中,通过regex.h头文件提供了对正则表达式的支持。我们可以使用正则表达式逐行匹配并提取数字。...五、总结逐行读取数字是C语言编程中常见的需求,本文介绍了几种方法实现该功能。使用sscanf函数、strtol函数或正则表达式可以轻松地提取出数字,并进行后续操作。

    94240

    LeetCode---消失的数字---C语言实现

    OJ链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。 你有办法在O(n)时间内完成吗?...本题相对书上原题稍作改动 示例 1: 输入:[3,0,1] 输出:2 示例 2: 输入:[9,6,4,2,3,5,7,0,1] 输出:8 思路 1:冒泡遍历 1.冒泡排序 2.遍历,如果当前值+1,不等于下一个数字就是下一个数...[9,6,4,2,3,5,7,0,1] 输出:8 我们重新创建一个数组[0.1.2.3.4.5.6.7.8.9]与所求数组[9,6,4,2,3,5,7,0,1]进行异或, 剩下的数字就是缺失的整数...numsSize;i++) { ret^=i; } return ret; 思路 3:和差法 1.0—n 等差数列计算和; 2.依次减掉数据中的值...,剩下的就是消失的数字.F(N)=N-1 时间复杂度为O(N). int missingNumber(int* nums, int numsSize) { int N=numsSize;

    7010
    领券