😎本文作者:大家好,我是原始豌豆,欢迎来到牛客网刷题解析第三期,感谢你阅读本文欢迎评论,收藏,点赞哦。
😊内容专栏:这里是《牛客网在线编程》专栏,笔者用重金(时间和精力)打造,每道题目提供多种解法,从基础到拓展,希望可以帮到读者们。
😘:写作不易,本文对每道题目提供了多种解法并加上了详细的注释,意在帮助读者锻炼思维灵活性,提高分析、解决问题的能力💓)。
开端
本次爆更,全篇共13826字,详细解析了每道题目,对其中一些题目采用了四到五种解法,并详细讲解了其中蕴含的算法思想和数学公式,在这篇文章中,我将分享刷题过程中的一些感悟、技巧和策略。同时,我也会分享一些个人的学习心得和经验,希望能帮助到同样热爱编程的你。
一段寻找自我与极限的旅程,让我们一起踏上这段奇妙的C语言刷题之旅吧!!!!
题目目录
牛客网语法篇基础语法31-50题(C语言实现)
题目网址链接请点这✌️
标注“ * ”符号的题目为重点题目(“ * ” 数越多,难度越高)
本页目录跳转请点下方
BC31 2的n次方计算 *
BC32 你能活多少秒
BC33 统计成绩 *
BC34 计算三角形的周长和面积
BC35 KiKi和酸奶 *
BC36 温度转换
BC37 牛牛的圆
BC38 牛牛的并联电路
BC39 牛牛的水杯 *
BC40 牛牛的等差数列
BC41 牛牛的球
BC42 小乐乐定闹钟 *
BC43 小乐乐排电梯
BC44 (小乐乐与欧几里得)最大公约数与最小公倍数问题 **
BC45 小乐乐改数字 **
BC46 KiKi算期末成绩
BC47 (a+b-c)*d的计算问题
BC48 牛牛的线段
BC49 kiki算数
BC50 你是天才么?
题目
BC31 2的n次方计算
//在2进制中,2的表示为00000010
//我们只使用移位符来完成2的n次方,仅需使这个2的二进制中的1往左移动。
//如4:二进制为00000100;8:二进制为00001000
//解法一
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
if (n == 0)//n=0时要单独判断一下,因为2^0=1
printf("%d", 1);
else
printf("%d", 2 << (n- 1));//要注意为什么这里是(n-1),因为2本身已经在第二位了,是2的1次方。
return 0;
}
//解法二 直接将1左移n位数,1的二进制位就是1,n=0时(即2的0次方),1左移0位还是1,n=3时,1左移三位变为100,即2的3次方8。
//这样可以解决计算2的0次方时,在解法一里需要单独判断的问题
#include <stdio.h>
int main() {
int n = 0;
scanf("%d", &n);
int ret = 1 << n; // 使用位操作符左移n位,实际上就是计算2的n次方。
printf("%d", ret);
return 0;
}
BC32 你能活多少秒
#include <stdio.h>
#include <math.h>// 引入数学库,使得我们可以使用pow函数进行幂运算。
int main() {
int age = 0;// 定义一个整数变量age,并初始化为0。这将是用户输入的年龄。
long sec = 0;// 定义一个长整数变量sec,用于存储以秒为单位的时间。初始化为0。
scanf("%d", &age);
sec = age * 3.156 * pow(10, 7);//使用pow函数计算3.156*10^7的值
printf("%ld", sec);
return 0;
}
BC33 统计成绩
//解法一 利用变长数组解决
#include <stdio.h>
int main() {
int n = 0;
float sum = 0.0f;
float lower = 100.0f,higher = 0.0f;// 定义两个浮点变量lower和higher,用于存储数据中的最小值和最大值,初始值分别为100和0
scanf("%d", &n);// 从标准输入读取一个整数n,表示数组的长度
float f[n];//变长数组不能初始化,C99标准以后支持变长数组
for (int i = 0; i < n; i++) {
scanf("%f", &f[i]);//输入五个数据,存入数组,存放时每个数据都跟最大最小值比较一下
if (f[i] < lower)// 如果读取的数据小于当前最小值,则更新最小值
lower = f[i];
else if (f[i] > higher)//如果读取的数据大于当前最大值,则更新最大值
higher = f[i];
sum += f[i];
}
printf("%.2f %.2f %.2f", higher, lower, sum / n);// 输出最大值、最小值和平均值,保留两位小数
return 0;
}
//解法二 通过循环每次比较输入的数值和最大最小值的大小,然后更新最大或最小值
//因为有输入缓冲区,所以数据不用存放在数组里
#include <stdio.h>
int main() {
int n = 0;
float sum = 0.0f;
float score = 0.0f;
float lower = 100.0f,higher = 0.0f;// 定义两个浮点变量lower和higher,用于存储数据中的最小值和最大值,初始值分别为100和0
scanf("%d", &n);// 从标准输入读取一个整数n,表示数据的数量
for (int i = 0; i < n; i++) {
scanf("%f", &score);//输入五个数据,是存在输入缓冲区中的,所以可以不用数组
if (score < lower)// 如果读取的数据小于当前最小值,则更新最小值
lower = score;
else if (score > higher)//如果读取的数据大于当前最大值,则更新最大值 if-else if结构比双if结构效率更高
higher = score;
sum += score;
}
printf("%.2f %.2f %.2f", higher, lower, sum / n);// 输出最大值、最小值和平均值,保留两位小数
return 0;
}
BC34 计算三角形的周长和面积
//海伦公式,又译作希伦公式、海伦-秦九韶公式。它是利用三角形的三条边的边长直接求三角形面积的公式。表达式为:S=√p(p-a)(p-b)(p-c)。其中p = (a + b + c) / 2;
#include<math.h>
int main() {
double a, b, c, p, l, s;//定义三边长a,b,c定义半周长p,定义周长l,定义面积s
scanf("%lf%lf%lf", &a, &b, &c);
p = (a + b + c) / 2;
l = a + b + c;
s = sqrt(p *