412.Fizz Buzz
题目描述
给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1
开始)返回结果,其中:answer[i] == “FizzBuzz” 如果 i 同时是 3 和 5 的倍数。 answer[i] == “Fizz” 如果 i 是
3 的倍数。 answer[i] == “Buzz” 如果 i 是 5 的倍数。 answer[i] == i
(以字符串形式)如果上述条件全不满足。
char ** fizzBuzz(int n, int* returnSize)
{
char** answer = (char**)malloc(sizeof(char*)*n);
*returnSize = n;
for(int i = 1;i < n+1;i++)
{
answer[i-1] = (char*)malloc(sizeof(char)*9);
if(i%3==0 && i%5 ==0)
{
answer[i-1] = "FizzBuzz";
}
else if(i%3 == 0)
{
answer[i-1] = "Fizz";
}
else if(i%5 == 0)
{
answer[i-1] = "Buzz";
}
else
{
sprintf(answer[i-1],"%d",i);
}
}
return answer;
}
解题思路
1、定义二级指针answer,并malloc开辟n个(char*)长度的空间;
2、讲二级指针看成是一个数组,每个成员的空间为9个字节
3、sprintf(answer[i-1],“%d”,i);,把i的值传到answer指针中
补充知识
sprintf是一个常见的格式化字符串函数,用于将格式化的数据写入字符串中。它的语法如下:
int sprintf(char *str, const char *format, ...);
这个函数接受一个字符串 str,一个格式化字符串 format,以及一系列要被格式化插入的参数。函数将根据指定的格式将数据写入到字符串str 中,并返回写入的字符数(不包括结尾的空字符)。
下面是一个示例,演示了如何使用 sprintf:
#include <stdio.h>
int main() {
char buffer[100];
int num = 42;
float pi = 3.14159;
sprintf(buffer, "The number is %d and the value of pi is %.2f", num, pi);
printf("Formatted string: %s\n", buffer);
return 0;
}
输出:
Formatted string: The number is 42 and the value of pi is 3.14
在上面的示例中,我们使用 sprintf 将整数 num 和浮点数 pi 格式化插入到字符串 buffer 中。格式化字符串 “The number is %d and the value of pi is %.2f” 定义了如何插入这些值。%d 是一个占位符,用于插入整数值,%.2f 是一个占位符,用于插入浮点数值(保留两位小数)。
需要注意的是,在使用 sprintf 时,确保目标字符串 str 能够容纳足够的空间,以避免发生缓冲区溢出。
该文章介绍了一个C语言实现的FizzBuzz问题解决方案。代码创建一个字符串数组answer,根据给定的整数n生成对应的FizzBuzz序列。对于每个数字i,如果它是3和5的倍数,数组元素设为FizzBuzz;如果只是3的倍数,设为Fizz;如果是5的倍数,设为Buzz;否则,将i转换为字符串存储。文章还讲解了使用sprintf函数进行格式化字符串的方法。

被折叠的 条评论
为什么被折叠?



