一题多解不同方法
对于同一个题目,可以用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 方向取整,而不是简单的向上取整到正无穷)
…等等等
总结
我们要学会从多个方向解答题目,多去学习别人的代码,可以发现并补足自己的短处。所以刷题是一个非常不错的选择!