9. 数列描述

news2024/12/22 1:22:55
题目描述:

有一个数列a[N] (N=60),从a[0]开始,每一项都是一个数字。数列中a[n+1]都是a[n]的描述。其中a[0]=1。

规则如下:

a[0]:1

a[1]:11(含义:其前一项a[0]=1是1个1,即“11”。表示a[0]从左到右,连续出现了1次“1”)

a[2]:21(含义:其前一项a[1]=11,从左到右:是由两个1组成,即“21”。表示a[1]从左到右,连续出现了两次“1”)

a[3]:1211(含义:其前一项a[2]=21,从左到右:是由一个2和一个1组成,即“1211”。表示a[2]从左到右,连续出现了1次“2”,然后又连续出现了1次“1”)

a[4]:111221(含义:其前一项a[3]=1211,从左到右:是由一个1、一个2、两个1组成,即“111221”。表示a[3]从左到右,连续出现了1次“1”,连续出现了1次“2”,连续出现了两次“1”)

请输出这个数列的第n项结果(a[n],0≤n≤59)。

输入描述:
数列的第n项(0≤n≤59):
4
输出描述:
数列的内容:


111221

补充说明:

示例1
输入:

4


输出:

111221
————————————————

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

一、问题分析

首先读题,仔细看描述中的内容,发现需求是

1.有一个数组,其中每一项的内容是对前一项的描述

2.第一项a[0]为1,第二项是a[1] = 11,代表1个1,第三项a[2] = 21代表2个1

3.输入一个数字,表示第n项

4.求输出第n项的内容

二、解题思路

1.我们可以使用暴力的方式,计算出从0到n每一项的内容

2.如何计算呢,我们需要从后往前遍历,定义两个变量一个是int count = 0;

一个是int num = 0;

3.使用count记录某一个num出现的次数,然后我们求出num的位数,

int temp = a[i - 1];

int a[i] = 0;

while(temp > 0){

num = temp % 10;

while(temp % 10 == num){

temp / = 10;

count++;

}

int snum = 10;

while(snum <= num) snum *= 10;

4.我们需要添加到结果的数字就是int add = snum * count + num;

if(a[i] > 0){

snum = 10;

while(a[i] >= snum) snum *= 10;

a[i] += snum * add;

}else {

a[i] = add;

}

}

5.然后我们将结果输出就可以了

三、具体步骤

使用的语言是C

#include <stdio.h>

int main() {
    int n;
	scanf("%d", &n);
	int a[n];
	a[0] = 1;
	for(int i = 1; i < n; i++) {
		int temp = a[i - 1];
		a[i] = 0;
		while(temp > 0) {
			int count = 0;
			int num = 0;
			num = temp % 10;
			printf("num is %d\n", num);
			while(temp % 10 == num) {
				count++;
				temp /= 10;
			}
			int snum = 10;
			while(snum <= num) snum *= 10;
			int add = snum * count + num;
			printf("add is %d\n", add);
			snum = 1;
			while(snum <= a[i]) snum *= 10;
			a[i] += add * snum;
			printf("a[%d] is %d\n", i, a[i]);
		}
	}
	printf("%d\n", a[n]);
    return 0;
}

但是实际使用的时候如果n过大的时候因为int类型最大值是2147483647,超过最大值会报错,所以要使用字符串来计算。

#include <stdio.h>
#include <string.h>

int main() {
    int n;
	scanf("%d", &n);
	char a[n][1000000];
	strcpy(a[0], "1");
	printf("a[0] = %s\n", a[0]);
	for(int i = 1; i < n; i++) {
		int len = strlen(a[i - 1]);
		printf("length of a[%d - 1] is %d\n",i,len);
		int index = 0;
		for(int j = 0; j < len; j++) {
			char num = a[i - 1][j];
			int count = 0;
			while(a[i - 1][j] == num){
				count++;
				j++;
			}
			j--;
			a[i][index++] = count + '0';
			a[i][index++] = num;
		}
		a[i][index] = '\0';
	}
	printf("%s\n", a[n - 1]);
    return 0;
}

如果记录每个字符串依旧内存过大

只记录两个数字

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
    int n;
	scanf("%d", &n);
	char* a = malloc(sizeof(char) * 100000000);
	char* b = malloc(sizeof(char) * 100000000);
	strcpy(a, "1");
	//printf("a[0] = %s\n", a);
	for(int i = 1; i < n; i++) {
		int len = strlen(a);
		//printf("length of %d is %d\n",i,len);
		int index = 0;
		for(int j = 0; j < len; j++) {
			char num = a[j];
			int count = 0;
			while(a[j] == num && j < len){
				count++;
				j++;
			}
			j--;
			b[index++] = count + '0';
			b[index++] = num;
		}
		b[index] = '\0';
		strcpy(a, b);
		free(b);
		b = malloc(sizeof(char) * 100000000);
	}
	printf("%s\n", a);
	free(a);
	free(b);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2263519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

word实现两栏格式公式居中,编号右对齐

1、确定分栏的宽度 选定一段文字 点击分栏&#xff1a;如本文的宽度为22.08字符 2、将公式设置为 两端对齐&#xff0c;首行无缩进。 将光标放在 公式前面 点击 格式-->段落-->制表位 在“制表位位置”输入-->11.04字符&#xff08;22.08/211.04字符&#xff09;&…

go语言zero框架中config读取不到.env文件问题排查与解决方案

在Go语言中&#xff0c;如果你使用.env文件来存储环境变量&#xff0c;通常会用到一些第三方库&#xff0c;例如github.com/joho/godotenv&#xff0c;它可以帮助我们从.env文件中读取环境变量。然而&#xff0c;在使用godotenv时&#xff0c;可能会遇到一些问题&#xff0c;导…

修改vscode设置的原理

转载请标明出处&#xff1a;小帆的帆的专栏 修改vscode设置 首先需要理解的是&#xff0c;vscode的系统设置和插件设置都是通过settings.json文件管理的。 vscode中有三个Settings&#xff0c;三个Settings分别对应三个settings.json文件 Default Settings&#xff1a;默认…

Qt之修改窗口标题、图标以及自定义标题栏(九)

Qt开发 系列文章 - titles-icons-titlebars&#xff08;九&#xff09; 目录 前言 一、修改标题 二、添加图标 三、更换标题栏 1.效果演示 2.创建标题栏类 3.定义相关函数 4.使用标题栏类 总结 前言 在我们利用Qt设计软件时&#xff0c;经常需要修改窗口标题、更改软…

环境变量的知识

目录 1. 环境变量的概念 2. 命令行参数 2.1 2.2 创建 code.c 文件 2.3 对比 ./code 执行和直接 code 执行 2.4 怎么可以不带 ./ 2.4.1 把我们的二进制文件拷贝到 usr/bin 路径下&#xff0c;也不用带 ./ 了 2.4.2 把我们自己的路径添加到环境变量里 3. 认识PATH 3.…

【时时三省】(C语言基础)通讯录1

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 通讯录 1 .通讯录中能够存放1000个人的信息 每个人的信息&#xff1a; 名字年龄性别电话地址 2、增加人的信息 3、删除指定人的信息 4、修改指定人的信息 5&#xff0c;查找指定人的信…

Vulhub:Redis[漏洞复现]

4-unacc(Redis未授权代码执行) 启动漏洞环境 docker-compose up -d 阅读vulhub给出的漏洞文档 cat README.zh-cn.md # Redis 4.x/5.x 主从复制导致的命令执行 Redis是著名的开源Key-Value数据库&#xff0c;其具备在沙箱中执行Lua脚本的能力。 Redis未授权访问在4.x/5.0.5以…

【PGCCC】Postgresql Varlena 结构

前言 postgresql 会有一些变长的数据类型&#xff0c;存储都是采用 varlena 格式的&#xff08;除了 cstring 类型&#xff09;&#xff0c;通过语句 SELECT typname FROM pg_type WHERE typlen -1就可以看到所有采用 varlena 格式的数据类型&#xff0c;比如常见的 text &am…

Ubuntu搭建ES8集群+加密通讯+https访问

目录 写在前面 一、前期准备 1. 创建用户和用户组 2. 修改limits.conf文件 3. 关闭操作系统swap功能 4. 调整mmap上限 二、安装ES 1.下载ES 2.配置集群间安全访问证书密钥 3.配置elasticsearch.yml 4.修改jvm.options 5.启动ES服务 6.修改密码 7.启用外部ht…

LeetCode:144.前序遍历

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;144. 二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#x…

git remote -v(--verbose)显示你的 Git 仓库配置的远程仓库的详细信息

git remote -v 是一个 Git 命令&#xff0c;用于显示你的 Git 仓库配置的远程仓库的详细信息。 当你执行 git remote -v 命令时&#xff0c;你会看到类似以下的输出&#xff1a; origin https://github.com/your-username/your-repo.git (fetch) origin https://github.com…

Gin-vue-admin(4):项目创建前端一级页面和二级页面

目录 创建一级页面创建二级页面 创建一级页面 view目录下新建一个my&#xff0c;Index.vue <template></template><script> export default {name:My, } </script><script setup> import {ref} from vue const myNameref("name") &…

数据结构漫游记:初识vector

​ 嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的…

R语言混合模型回归GBTM群组轨迹模型绘图可视化研究

全文链接&#xff1a;https://tecdat.cn/?p38581 在回归分析的广袤领域中&#xff0c;面对具有多条未知函数线的复杂数据时&#xff0c;传统方法常常捉襟见肘。混合模型作为一种强有力的分析手段应运而生&#xff0c;其在处理此类复杂情境时展现出独特的优势与潜力&#xff08…

uniapp自定义树型结构数据弹窗,给默认选中的节点,禁用所有子节点

兼容H5、安卓App、微信小程序 实现逻辑&#xff1a;给默认选中节点的所有子节点添加一个disabled属性&#xff0c;以此禁用子节点。 /components/sonTreeNode/sonTreeNode.vue 封装成组件 <template><view><view :class"[item,item.is_level1?pL1:item…

水仙花数(流程图,NS流程图)

题目&#xff1a;打印出所有的100-999之间的"水仙花数"&#xff0c;并画出流程图和NS流程图。所谓"水仙花数"是指一个三位数&#xff0c;其各位数字立方和等于该数本身。例如&#xff1a;153是一个"水仙花数"&#xff0c;因为1531的三次方&#…

【C++读写.xlsx文件】OpenXLSX开源库在 Ubuntu 18.04 的编译、交叉编译与使用教程

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 2024-12-17 …

Kioptix Level 2靶场练习保姆级---春不晚

1.将靶机导入至vm中 首先将靶机的网络设置为nat模式&#xff0c;然后在kali中使用arp-scan命令查找靶机ip 靶机ip为&#xff1a;61.139.2.130 arp-scan -l 2.使用nmap扫描目标ip的端口 nmap -p- 61.139.2.130 3.对存在端口进行服务版本和、系统版本、默认脚本检测 nmap -p…

电子元器件与电路之-MOS管的介绍和作用

一、基本概念 MOS 管&#xff0c;或MOSFET&#xff0c;全称是Metal-Oxide-Semiconductor Field-Effect Transistor&#xff08;金属 - 氧化物 - 半导体场效应晶体管&#xff09;。和三极管利用电流控制电流不同&#xff0c;它是一种利用电场效应来控制电流的半导体器件。和三级…

异地组网最简单的方法

01、使用硬件路由器的VPN功能 这是一种相对简单且常用的异地组网方法。你需要有支持VPN功能的路由器&#xff0c;如华硕、中兴等品牌。在主站点的路由器上配置VPN服务器&#xff0c;并在异地设备上通过操作系统自带的VPN连接功能添加一个VPN连接&#xff0c;输入主站点路由器的…