题目:
写一个程序,输出从 1 到 n 数字的字符串表示。
1. 如果 n 是3的倍数,输出“Fizz”;
2. 如果 n 是5的倍数,输出“Buzz”;
3.如果 n 同时是3和5的倍数,输出 “FizzBuzz”。
示例:
n = 15, 返回: [ "1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz" ]
拓展:
用malloc动态申请一个二维数组的三种方法:
方法一:利用二级指针申请一个二维数组。
arr = (int **)malloc(sizeof(int*)*m)
for(int i =0;i<m;++i)
arr[i] = (int *)malloc(sizeof(int)*n);
//内存释放
for(i=0;i<m;i++)
free(arr[i]);
free(arr);
方法二:用数组指针形式申请一个二维数组。
//申请一个3行2列的整型数组
int (*arr)[2]=(int(*)[2])malloc(sizeof(int)*3*2);
free(a);
方法三:用一个单独的一维数组来模拟二维数组。
Array=(int *)malloc(nrows*ncolumns*sizeof(int));
free(Array)
1.将字符串转成int
char s[20] = "123456"; // 注如果此处不是数字字符串类型,如下面的字符串 12abc --> 12 ab12 --> 0
int a = 0;
sscanf(s,"%d",&a); // a = 123456 就得到了
2.将int转成字符串
int a = 12345;
char s[20] = "";
sprintf(s,"%d",a);
这时候s中保存的就是字符串“12345”。
/**
Problem:
写一个程序,输出从 1 到 n 数字的字符串表示。
1. 如果 n 是3的倍数,输出“Fizz”;
2. 如果 n 是5的倍数,输出“Buzz”;
3.如果 n 同时是3和5的倍数,输出 “FizzBuzz”。
@author: Gallery
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**
* Note: The returned array must be malloced, assume caller calls free().
思路一:利用循环遍历小于n的所有数,利用取余操作
拓展知识:malloc创建二维数组,详见博客
*/
char ** fizzBuzz(int n, int* returnSize)
{
char ** result = (char**)malloc(sizeof(char*)*n); ///n行
int i;
for(i=1; i<=n; ++i)
{
if(i%3 == 0 && i%5==0)
{
result[i-1] = (char*)malloc(sizeof(char)*9);
strcpy(result[i-1],"FizzBuzz");
//printf("%s",result[i-1]);
}
else if(i%3 == 0)
{
result[i-1] = (char*)malloc(sizeof(char)*5);
strcpy(result[i-1],"Fizz");
// printf("%s",result[i-1]);
}
else if(i%5 == 0)
{
result[i-1] = (char*)malloc(sizeof(char)*5);
strcpy(result[i-1],"Buzz");
// printf("%s",result[i-1]);
}
else
{
result[i-1] = (char*)malloc(sizeof(char)*10);
sprintf(result[i-1],"%d",i);
}
// printf("%s\n",result[i-1]);
///C 库函数 int sprintf(char *str, const char *format, ...) 发送格式化输出到 str 所指向的字符串。
}
(*returnSize) = n;
return result;
}
int main(void )
{
int num;
int len=0;
scanf("%d",&num);
char ** result=fizzBuzz(num,&len);
for(int i =0 ; i <len ; i++)
{
printf("%s\n",result[i]);
free(result[i]);
}
free(result);
return 0;
}