C语言1 11 21 1211,每日一题31

本文通过引用C语言之父Dennis Ritchie和Steve Jobs的观点强调了编程学习的重要性,并介绍了LeetCode的报数序列问题。该问题要求根据给定的整数n生成报数序列的第n项。提供的解决方案通过统计前一项中每个字符出现的次数来构造下一项。文章鼓励读者尝试优化解法并提升编程思维。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原标题:每日一题31

每日一题

0d6aa42e03e94dce292350bd9827ac48.png

编程语言的学习,绝非一朝一夕,没有成千上万代码的累计是不可能的。——Dennis Ritchie(C语言之父)

我们每个人都应该会编程,因为它教你如何思考。——apple创始人 史蒂夫.乔布斯

题目描述

(leetcode报数Count and Say)

报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。第一项存入一个字符‘1’,那么你就从第二项开始描述前一项的字符,例如:第一项‘1’,那么第二项就为‘11’表示‘1个1’,第三项为‘21’表示‘2个1’。其前五项如下:

1

11

21

1211

111221

1 被读作 “one 1” (“一个一”) , 即 11。

11 被读作 “two 1s” (“两个一”), 即 21。

21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。

给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。

注意:整数顺序将表示为一个字符串。

题目解析

我们可以统计相同数字出现的次数,比如前一项有这样一串字符‘1113334’,那么我们就可以统计 1 出现的次数为 3 ,3 出现的次数 3 ,4 出现的次数 1 ,所以下一项就为‘3 1 3 3 1 4’,大概就是每一个字符出现的次数 + 字符

char* countAndSay(intn){

char* str = (char*)malloc(sizeof(char) * 1000000);

chartempChar[1000000];

str[0] = '1';

intk = 0;

for(inti = 1;i < n;i++)

{

for(intj = 0,count = 1;j < strlen(str);j++, count = 1)

{

while(str[j] == str[j+1]) //统计字符出现次数

{

count++;

j++;

}

tempChar[k++] = count + '0'; //分别将字符次数和字符存入一个临时字符数组

tempChar[k++] = str[j];

}

tempChar[k] = '0'; //记得在最后加上结尾符

strcpy(str, tempChar);

k = 0; //重置临时字符数组下标

}

returnstr;

}

为了让大多数人学习理解,关于每日一题中我们给出的解法是最通俗易懂的,也就是大家最容易想到的,但这可能不是最优解,解体技巧和时空复杂度的考虑可能会有欠缺,学有余力的读者可以试着给出其他解法与小编交流。

2

责任编辑:

### 关于C语言选择题练习的相关资源 对于希望提高C语言能力的学习者来说,通过做选择题可以快速掌握基础知识并检验自己的理解程度。以下是关于C语言选择题的些推荐方向和相关内容: #### 资源推荐 1. **《C语言入门必刷100题》系列** 这系列包含了丰富的编程实践题目[^1],虽然主要以实际编码为主,但在其中也穿插了些理论性的选择题,帮助巩固基本概念。 2. **《C C++最全每日亿题》** 此系列不仅提供了大量的编程实战训练,还特别针对初学者设计了许多基础知识点的选择题练习[^4]。这些题目覆盖了变量、数据类型、控制结构等多个方面。 3. **字符串处理专题** 题目描述中提到的个典型例子是统计字符串中的不同字符种类[^2]。这类问题可以通过设置多项选项来考察学生对条件判断的理解以及逻辑思维能力。 4. **算法与程序设计教程** 结合具体实例进行讲解的文章通常会附带测试性质的小测验[^3],这对于想要全面了解某特定主题下的各种可能性非常有帮助。 #### 示例代码片段 下面给出段简单的示例代码用于展示如何利用if-else语句完成基于条件分支的操作: ```c #include <stdio.h> int main() { int i; for (i = 1; i <= 10; ++i) { if (i % 3 != 0){ printf("%d ", i); } else{ continue; } } return 0; } ``` 该段代码展示了当`i`能够被3整除时跳过打印操作的过程。 #### 总结 为了更好地准备C语言考试或者自我评估水平,建议综合运用上述提到的各种资源来进行系统化的复习和练习。同时注意积累常见错误案例以便加深印象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值