网站首页 > 技术教程 正文
外观数列是一个非常有趣的数列,它的每一项都是对前一项的描述。例如,第一项是"1",第二项描述第一项,即"一个1",记作"11",第三项描述第二项,即"两个1",记作"21",以此类推。今天,我们就来深入探讨一下这个数列,并通过C语言来实现它。
外观数列的定义
外观数列是由递归公式定义的数字字符串列:
- countAndSay(1)=“1”
- countAndSay(n)是对countAndSay(n-1)的描述,然后转换成另一个数字字符串。
前五项如下:
- “1”
- “11”
- “21”
- “1211”
- “111221”
解题思路
解决这个问题的关键在于理解如何描述一个数字字符串。我们需要将字符串分割为最小数量的组,每个组都由连续的最多相同字符组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。
程序展示:
以下是在VC6.0环境下运行调试的C语言程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* countAndSay(int n)
{
if (n == 1) return "1";
char* prev = countAndSay(n - 1);
int len = strlen(prev);
char* ret = (char*)malloc(2 * len * sizeof(char));
int i = 0, j = 0;
while (i < len)
{
int count = 1;
while (i + 1 < len && prev[i] == prev[i + 1])
{
i++;
count++;
}
ret[j++] = count + '0';
ret[j++] = prev[i];
i++;
}
ret[j] = '\0';
return ret;
}
int main()
{
int n = 5;
char* ret = countAndSay(n);
printf("%s\n", ret);
return 0;
}
程序测试:
运行上述代码,在VC6.0的环境下,可以得到如下的输出:
111221
第一项是数字 1
描述前一项,这个数是1即“一个1",记作"11"描述前一项,这个数是11即“二个1”,记作"2描述前一项,这个数是21即"一个2+一个1'描述前一项,这个数是1211即"一个1+-个要 描述 一个数字字符串,首先要将字符串分割为 最小数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。
这与题目给出的结果一致,说明我们的算法是正确的
代码获取:
我用夸克网盘分享了「20240119」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/56fd09c9bbed
下期预告
下期我们将探讨另一个有趣的问题:两数之和 I。给定一个已按照 非递减顺序排列 的整数数组 numbers,请你从数组中找出两个数满足相加之和等于目标数 target。敬请期待!
希望这篇文章对你有所帮助!如果你觉得有用,不妨分享给你的朋友,也欢迎关注我们的微信公众号“工控小新”,我们会持续更新更多的编程教学内容。谢谢你的阅读!
点赞加关注,学习不迷路
微信公众号|工控小新
EPLAN电气绘图、TIA博图基础 、CAD、C语言教学、单片机基础、三菱PLC ... 每日持续更新中
猜你喜欢
- 2024-10-08 ARM裸机开发步骤和工具使用(SourceInght NotePad++使用)
- 2024-10-08 各种软件自下载 软件自己下载软件
- 2024-10-08 vcredist_x86.exe下载|vcredist_x86.exe 32位官方版
- 2024-10-08 西门子WINCC V6.0-V7.5下载链接汇总,软件不求人!
- 2024-10-08 应用程序无法正常启动0xc0150002解决方案
- 2024-10-08 什么SDK? 什么sd卡质量好
- 2024-10-08 今天为小白讲解一下editplus如何搭建gcc
- 2024-10-08 微软悄然向 Win11/Win10 用户推送 Bing Service 2.0 更新
- 2024-10-08 “最后一个星期”想要熟练C语言,现不现实?如何快速掌握C语言?
- 2024-10-08 教你一招丨如何“一星期”快速掌握C语言?
你 发表评论:
欢迎- 01-11关于Vmware workstation的网络设置
- 01-11使用VMware Workstation虚拟机安装Windows 10详细教程
- 01-11VMware Workstation 17.5.1 Pro for Windows & Linux - 桌面虚拟化软件
- 01-11VMware? Workstation 17 Pro软件中,如何显示 “我的计算机” 选项卡
- 01-11银河麒麟桌面操作系统安装VMware workstation pro
- 01-11VmwareWorkstation17.6安装windows7x64虚拟机后安装vmtools
- 01-11发布VMware Workstation Pro 17.0稳定版
- 01-11VMware Workstation安装ESXi 7安装篇
- 最近发表
-
- 关于Vmware workstation的网络设置
- 使用VMware Workstation虚拟机安装Windows 10详细教程
- VMware Workstation 17.5.1 Pro for Windows & Linux - 桌面虚拟化软件
- VMware? Workstation 17 Pro软件中,如何显示 “我的计算机” 选项卡
- 银河麒麟桌面操作系统安装VMware workstation pro
- VmwareWorkstation17.6安装windows7x64虚拟机后安装vmtools
- 发布VMware Workstation Pro 17.0稳定版
- VMware Workstation安装ESXi 7安装篇
- 如何安装虚拟机(vmware workstation)
- VMware Workstation之网络配置
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)