2018年1月31日 星期三

[412] Fizz Buzz

被結束字元整的亂七八糟的..........
為什麼會這樣呢XD

從一印到n, 是三的倍數的時候印FIZZ
是五的倍數的時候印BUZZ,
是三&五的倍數印FIZZBUSS

412. Fizz Buzz

/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
char** fizzBuzz(int n, int* returnSize) {
    char **ret = malloc(sizeof(char *)*n);
    char five[]="Buzz";
    char three[]="Fizz";
    char both[]="FizzBuzz";

    *returnSize = n;
    int i=0;
    for (i=1;i<=n;i++)
    {
        if(i%3==0 && i%5==0)
        {
            ret[i-1] = malloc(sizeof(char)*9);
            memset(ret[i-1],0,9);
            memcpy(ret[i-1],both,8);
        }
        else if(i%3==0)
        {
            ret[i-1] = malloc(sizeof(char)*5);
            memset(ret[i-1],0,5);
            memcpy(ret[i-1],three,4);
        }
        else if(i%5==0)
        {
            ret[i-1] = malloc(sizeof(char)*5);
            memset(ret[i-1],0,5);
            memcpy(ret[i-1],five,4);          
        }
        else
//        if(i%3!=0 && i%5 !=0)
        {
            char num[100];
            memset(num,"",100);
            sprintf(num,"%d",i);
            ret[i-1] = malloc(sizeof(char)*strlen(num));
            strcpy(ret[i-1], num);
        }
    }
       
    return ret;
}

精簡版 QQ
然後再次驗證在測資不多或是數目少的時候
快慢根本是看心情的啊啊啊啊啊~~~
傷心QQ

/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
char** fizzBuzz(int n, int* returnSize) {
    char **ret = malloc(sizeof(char *)*n);
    for (int i=1;i<=n;i++)
    {
        ret[i-1] = malloc(sizeof(char)*9);

        if(i%3==0 && i%5==0)
        {
            sprintf(ret[i-1],"%s","FizzBuzz");
        }
        else if(i%3==0)
        {
            sprintf(ret[i-1],"%s","Fizz");
        }
        else if(i%5==0)
        {
            sprintf(ret[i-1],"%s","Buzz");          
        }
        else
        {
            sprintf(ret[i-1],"%d",i);
        }
    }
    *returnSize = n;      
    return ret;
}

20230819 再次更新
因為聽說有人考這個所以回來寫一下
哦再次感受到我進步了 XD
char ** fizzBuzz(int n, int* returnSize){
char **ret = malloc (sizeof(char*)*n);
for (int i=1;i<=n;i++)
{
int three = i%3;
int five = i%5;
if (three == 0 && five ==0)
{
ret[i-1] = malloc(sizeof(char)*8);
ret[i-1] = "FizzBuzz";
}
else if (three==0)
{
ret[i-1] = malloc(sizeof(char)*4);
ret[i-1] = "Fizz";
}
else if (five==0)
{
ret[i-1] = malloc(sizeof(char)*4);
ret[i-1] = "Buzz";
}
else
{
ret[i-1] = malloc(sizeof(char)*5);
sprintf(ret[i-1], "%d", i);
}
}
*returnSize = n;
return ret;
}

不過這個行數還是讓人心生不忍,只好還是暴力先給它最大size  XD
char ** fizzBuzz(int n, int* returnSize){
char **ret = malloc (sizeof(char*)*n);
for (int i=1;i<=n;i++)
{
ret[i-1] = malloc(sizeof(char)*8);
if (i%3 == 0 && i%5 ==0)
ret[i-1] = "FizzBuzz";
else if (i%3==0)
ret[i-1] = "Fizz";
else if (i%5==0)
ret[i-1] = "Buzz";
else
sprintf(ret[i-1], "%d", i);
}
*returnSize = n;
return ret;
}

沒有留言:

張貼留言