C语言刷题(二)

力扣新手村题目  

1.给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中:

answer[i] == "FizzBuzz" 如果 i 同时是 3 和 5 的倍数。
answer[i] == "Fizz" 如果 i 是 3 的倍数。
answer[i] == "Buzz" 如果 i 是 5 的倍数。
answer[i] == i (以字符串形式)如果上述条件全不满足。
输入:n = 3
输出:["1", "2", "Fizz"]

解题思路:通过初始化开辟一个二级指针的数组空间,然后对1-n进行遍历,对每个i都进行%5 %3和%5 && %3将其各自的值存入到数组中,将输出常数的放到二级指针空间的一级指针当中,最后输出数组。

注:

int **p :二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针(即p指向的地址里面存放的是一个指向int的一级指针)。而这里使用二级指针,是因为一级指针需要存放int类型的数,所以创建一个char型的二级指针,其二级存放char类型,而一级存放int类型。

char** fizzBuzz(int n, int* returnSize) {
    char** answer = (char**)malloc(sizeof(char*) * n);
    for (int i = 1; i <= n; i++)
    {
        if ((i % 5 == 0) && (i % 3 == 0)) {
            answer[i - 1] = "FizzBuzz";
        }
        else if (i % 5 == 0) {
            answer[i - 1] = "Buzz";
        }
        else if (i % 3 == 0) {
            answer[i - 1] = "Fizz";
        }
        else {
            answer[i - 1] = (char*)malloc(sizeof(char) * 8); //开辟一个八个字符的空间
            sprintf(answer[i - 1], "%d", i);
        }
    }
    *returnSize = n;
    return answer;
}

 

2.给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。 

 输入:num = 14
输出:6
解释:
步骤 1) 14 是偶数,除以 2 得到 7 。
步骤 2) 7 是奇数,减 1 得到 6 。
步骤 3) 6 是偶数,除以 2 得到 3 。
步骤 4) 3 是奇数,减 1 得到 2 。
步骤 5) 2 是偶数,除以 2 得到 1 。
步骤 6) 1 是奇数,减 1 得到 0 。

思路:通过设置一个计数器,在进行while循环,来判断num是否为0,不为零则判断奇偶,奇数则num--,计数器加一,为偶数则num/2 ,计数器加一。while结束后返回计数器数值。

int numberOfSteps(int num) {
	int count = 0;
	while (num) {
		if (num % 2 == 0)
		{
			count++;
			num = num / 2;
			continue;
		}
		else {
			count++;
			num--;
			continue;
		}
	}
	return count;

}

3.给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i​​​​​ 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。

 输入:accounts = [[1,2,3],[3,2,1]]
输出:6
解释:
第 1 位客户的资产总量 = 1 + 2 + 3 = 6
第 2 位客户的资产总量 = 3 + 2 + 1 = 6
两位客户都是最富有的,资产总量都是 6 ,所以返回 6 。

思路:通过两个for循环完成,最外头for循环控制i个客户,而里面的for循环控制其在j家银行里的财产,通过先默认设置一个最大值MAX,然后去遍历数组,通过跟MAX跟替换,遍历完后获得最大的财产总量客户的财产。

int maximumWealth(int** accounts, int accountsSize, int* accountsColSize) {
    int MAX = 0;
    int i = 0;
    int j = 0;
    for (i = 0; i < accountsSize; i++)
    {
        int sum = 0;
        for (j = 0; j < *accountsColSize; j++)
        {
            sum = sum + accounts[i][j];
            if (MAX < sum)
            {
                MAX = sum;
            }
        }
    }
    return MAX;
}

 提交结果:

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值