栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

习题:Fizz Buzz(C语言) 《初级算法》<数学>部分开始

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

习题:Fizz Buzz(C语言) 《初级算法》<数学>部分开始

题目

写一个程序,输出从 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” ]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fizz-buzz

自己写的普通方法,在非3、5倍数的时候赋值比较复杂,用了数字转字符串

//普通方法
//字符串反转(逆置)"abc"->"cba"
void Reverse(char* str)
{
	int t;
	int len = strlen(str);
	for (int i = 0, j = len - 1; i < j; i++, j--)
	{
		t = str[i];
		str[i] = str[j];
		str[j] = t;
	}
}
//数字转字符串
char* Myitoa(char* str, int n)
{
	int i = 0;
	while (n != 0)
	{
		str[i++] = n % 10 + '0';
		n /= 10;
	}
	str[i] = '';
	Reverse(str);
	return str;
}
char** fizzBuzz(int n, int* returnSize)
{
	*returnSize = n;
	char** s = (char**)malloc(sizeof(char*) * n);
	char tmp;
	for (int i = 1; i <= n; i++)
	{
		if (i % 3 == 0 && i % 5 == 0)
		{
			s[i - 1] = (char*)malloc(9);
			strcpy(s[i - 1], "FizzBuzz");
		}
		else if (i % 3 == 0)
		{
			s[i - 1] = (char*)malloc(5);
			strcpy(s[i - 1], "Fizz");
		}
		else if (i % 5 == 0)
		{
			s[i - 1] = (char*)malloc(5);
			strcpy(s[i - 1], "Buzz");
		}
		else
		{
			s[i - 1] = (char*)malloc(n + 1);
			Myitoa(s[i - 1], i);
		}
	}
	return s;
}

itoa函数在VS可以直接用,但在leecode貌似不行
实际上,有说明:itoa并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。标准库中有sprintf,功能比这个更强,用法跟printf类似:

char str[255];

sprintf(str, “%x”, 100); //将100转为16进制表示的字符串。

进阶一下,只把自己写的Myitoa函数换成sprintf

char** fizzBuzz(int n, int* returnSize)
{
	*returnSize = n;
	char** s = (char**)malloc(sizeof(char*) * n);
	char tmp;
	for (int i = 1; i <= n; i++)
	{
		if (i % 3 == 0 && i % 5 == 0)
		{
			s[i - 1] = (char*)malloc(9);
			strcpy(s[i - 1], "FizzBuzz");
		}
		else if (i % 3 == 0)
		{
			s[i - 1] = (char*)malloc(5);
			strcpy(s[i - 1], "Fizz");
		}
		else if (i % 5 == 0)
		{
			s[i - 1] = (char*)malloc(5);
			strcpy(s[i - 1], "Buzz");
		}
		else
		{
			s[i - 1] = (char*)malloc(n + 1);
			sprintf(s[i - 1], "%d", i);
		}
	}
	return s;
}

评论区也有不使用strcpy,一直使用sprintf的操作

char** fizzBuzz(int n, int* returnSize)
{
    char* fizz = (char*)malloc(sizeof("Fizz"));
    char* buzz = (char*)malloc(sizeof("Buzz"));
    char* fizzbuzz = (char*)malloc(sizeof("FizzBuzz"));
    sprintf(fizz, "%s", "Fizz");
    sprintf(buzz, "%s", "Buzz");
    sprintf(fizzbuzz, "%s", "FizzBuzz");
    char** res = (char**)malloc(sizeof(char*) * n);
    *returnSize = n;
    for (int i = 1; i <= n; i++) 
    {
        if (i % 15 == 0)      
            res[i - 1] = fizzbuzz;
        else if (i % 5 == 0)  
            res[i - 1] = buzz;
        else if (i % 3 == 0)  
            res[i - 1] = fizz;
        else 
        {
            res[i - 1] = (char*)malloc(10);
            sprintf(res[i - 1], "%d", i);
        }
    }
    return res;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/311788.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号