本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。
💓博主csdn个人主页:小小unicorn
⏩专栏分类:C语言天天练
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识
题目描述:
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
- 用返回一个整数列表来代替打印
- n 为正整数,0 < n <= 5
解题思路:
读完题目,基本思路大多数人想到的是是遍历数组,但有没有想过,这次与以往遍历有所不同,遍历数组的大小是由用户决定。那怎么解决呢?我们可以采取赋值的方式解决这个问题。
由此接口函数的返回值肯定是整个数组,所以我们采用int*作为该函数的返回值。
int* printNumbers(int n, int* returnSize )
int* returnSize:返回数组元素的个数。
函数传参首先需要知道用户求值(也就是题目问的),其次还要告诉返回数组元素的个数。
返回数组元素的个数怎么判断呢?举几个例子,你就明白了:
当输入1的时候,最大的 1位十进制数为9.
当输入2的时候,最大的 2位十进制数为99.
当输入3的时候,最大的 3位十进制数为999.
…
依次内推,我们可以观察出一个规律,返回值是10的n次方-1.
所以,我们可以用c语言中的pow函数来进行该操作。
*returnSize = pow(10, n) - 1;
既然返回一个数组并给这个数组还要进行赋值操作,数组的大小具体也不知道,为防止空间消耗,我们可以动态开辟一个数组。
int* arr = (int*)malloc(*returnSize * sizeof(int)); //malloc(字节数)
最后就是赋值操作了,这应该难不倒大家!
//赋值 for (int i = 0; i < *returnSize ; ++i) { *(arr + i) = i + 1; }
代码实现:
//*returnSize: 返回数组元素的个数; int* printNumbers(int n, int* returnSize ) { //返回数组元素的个数 *returnSize = pow(10, n) - 1; //动态分配空间 int* arr = (int*)malloc(*returnSize * sizeof(int)); //malloc(字节数) //赋值 for (int i = 0; i < *returnSize ; ++i) { *(arr + i) = i + 1; } //返回 return arr; }
结果情况:
符合题目情况,问题得到解决。
总结:
以本题为例:当用遍历这个方法解决不了问题或被卡主是时,我们就用了赋值的方法。通过这道题会给我们一个启示,当我们解决问题时,用我们最容易想到的办法发现解决不了问题,我们就就可以尝试换另一种思路。
文章到这里就要告一段落了,有更好的想法或问题,欢迎评论区留言。
希望今天的练习能对您有所收获,咱们下期见!