leet412. Fizz Buzz

题目:

写一个程序,输出从 1 到 n 数字的字符串表示。

1. 如果 是3的倍数,输出“Fizz”;

2. 如果 是5的倍数,输出“Buzz”;

3.如果 同时是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;
}
发布了46 篇原创文章 · 获赞 1 · 访问量 5721

猜你喜欢

转载自blog.csdn.net/Happy_Yu_Life/article/details/105357120