C语言--------一题可多解

一题多解不同方法

对于同一个题目,可以用C语言的不同的代码进行破解。牛客网可刷基础新手C语言题目,提升自我动手思考敲代码的能力。比如语法篇C语言入门 BC类题型。当学到指针可以刷C语言CC题型。



一、说明一题多解

不仅要刷题,同时可以查看讨论,每个人的思维方式大相径庭,通过学习别人的代码,有利于打破我们的固有思维,得到一个新的思路题解。更加有助于我们对于C语言的理解。

二、 举例

1. 求解 2 的 n 次方

求解 2 的 n 次方

方法①:循环求解 2 的 n 次方

#include <stdio.h>
int main() {
    int a, b=2;
    scanf("%d", &a);
    for(int i = 1; i < a; i++)
    {
       b *= 2; 
    }
    printf("%d", b);
    return 0;
}

方法②:左移运算符求解 2 的 n 次方

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>//左移运算符
//将左侧的二进制位向左移动到指定的位数,右侧用0填充
//1 << 4 相当于2 的 4 次方
int main() {

    int i = 0;
    scanf("%d", &i);
    printf("%d", 1 << i);//或者 2 << (i - 1)
    return 0;
}

方法③:头文件math.h解决 2 的 n 次方

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//方法三:头文件math.h
#include<math.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int a = pow(2, n);
	printf("%d", a);//不能直接printf("%d", pow(2, n));
	//直接使用pow(2, n)
	//则为printf("%f", pow(2, n));
	return 0;
}

方法④:自定义函数
运用math.h
中的pow函数
其中pow全英文为“power”,用作计算一个数的幂。
在这里插入图片描述
在这里插入图片描述

  • base 表示底数
  • exponent是指数
  • 函数返回 base 的 expontent 次幂的结果,类型为double。
#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//方法四:自定义函数
int Pow(int c)
{
    int b = 2;
    for (int i = 1; i < c; i++)
    {
        b *= 2;
    }
    return b;
}
int main() {
    int a;
    scanf("%d", &a);
    printf("%d", Pow(a));
    return 0;
}

方法⑤:递归函数

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//方法五:函数递归
int Pow(int a)
{
	if (a == 0)
		a = 1;
	else if (a == 1)
		a = 2;
	else
		a = Pow(a - 1)* 2;
	return a;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	printf("%d", Pow(n));
	return 0;
}

…等等等

2.牛牛最少要喝多少杯水才能解渴。

牛牛口渴了,要喝10升水才能解渴,但现在只有一个深 h 厘米,底面半径是 r 厘米的水杯,
牛牛最少要喝多少杯水才能解渴。
水杯的体积公式是 V = π×r×r×h;

方法①:选择语句

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define PI 3.14//宏定义
//牛牛口渴了,要喝10升水才能解渴,但现在只有一个深 h 厘米,底面半径是 r 厘米的水杯,
// 牛牛最少要喝多少杯水才能解渴。
//水杯的体积公式是 V = π×r×r×h;
 //方法一:选择语句
int main() {
    int h, r, a = 0;
    float v = 0;
    scanf("%d %d", &h, &r);
    v = PI * h * r * r;//体积
    v = 10000 / v;//小数几杯水
    a = (int)v;//整数几杯水
    if (v - a)//判断是否分数部分为0
    {
        printf("%d", a + 1);
    }
    else {
        printf("%d", a);
    }
    return 0;
}

方法②:

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define PI 3.14
//方法二:循环语句
int main()
{
	int r = 0;
	int h = 0;
	float v = 0;//体积
	float target = 10;
	int count = 0;//杯数
	scanf("%d %d", &h, &r);
	v = PI * r * r * h;
	v = v / 1000;//毫升转换为升
	while (target > 0)
	{
		target = target - v;
		count++;
	}
	printf("%d", count);
	return 0;
	}

方法③:头文件math.h

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define PI 3.14
#include<math.h>
//方法三:头文件math.h
int main()
{
	int r, h;
	float v = 0;
	scanf("%d %d", &h, &r);
	v = PI * pow(r,2) * h / 1000;
	printf("%d", (int)ceil(10000 / v));
	return 0;
}

ceil函数是临近整数的浮点数计算,其英文名为ceiling(天花板),因为它就像是数值的“天花板”,总是找到不小于给定数值的最小整数。

  • ceil(1.2) 返回2.0
  • ceil(3.0) 返回3.0
  • ceil(-1.2) 返回 -1.0 (注意,ceil函数是向 0 方向取整,而不是简单的向上取整到正无穷)

在这里插入图片描述
在这里插入图片描述
…等等等


总结

我们要学会从多个方向解答题目,多去学习别人的代码,可以发现并补足自己的短处。所以刷题是一个非常不错的选择!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值