為什麼會這樣呢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;
}