前言:
大家好,我决定日后逐渐更新c刷题训练营的内容,或许能帮到入门c语言的初学者,如果文章有错误,非常欢迎你的指正!
个人主页:Dream_Chaser~
✨✨刷题专栏:http://t.csdn.cn/baIPx
⛳⛳本篇内容:c语言刷题训练营 第三讲(牛客网)
目录
BC25-计算体重指数
题目描述
BC26- 计算三角形的周长和面积
题目描述
BC27-计算球体的体积
题目描述
BC10-成绩的输入输出
题目描述
BC38-变种水仙花数
题目描述:
BC20-kiki算数
题目描述
BC21-浮点数的个位数字
题目描述
BC22-你能活多少秒
题目描述:
来源:计算体重指数_牛客题霸_牛客网 (nowcoder.com)
问题:计算BMI 指数(身体质量指数)。 BMI 指数 (即身体质量指数,简称体质指数又称 体重 ,英文为Body Mass Index,简称 BMI ),是用体重公斤数除以身高米数平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。主要用于 统计 用途,当我们需要比较及分析一个人的体重对于不同高度的人所带来的健康影响时, BMI 值 是一个中立而可靠的 指标 。
一行,两个整数,分别表示体重(公斤),身高(厘米),中间用一个空格分隔
一行, BMI 指数(保留两位小数)。
示例1
输入
70 170
24.22
代码实现:
#include
int main()
{
//输入
int weight = 0;
int high = 0;
double bmi = 0.0;
scanf("%d %d", &weight, &high);
//计算机BMI
bmi = weight / ((high / 100.0) * (high / 100.0));//身高米数的平方
//输出
printf("%.2lf\n", bmi);
return 0;
}
解析:
要得到浮点数,要进行浮点数除法,这里就得保证 / 两端的操作数至少有一个数是浮点数.拿出计算器,可以看出 带一位小数*带一位小数的结果是带两位的所以最后面printf的时候 .2lf保留两位小数是符合前面的逻辑的
前提知识:
%.nf
:其中n
是一个整数,用于指定要显示的小数位数。例如,printf("%.2f", 3.1415926);
将输出3.14
,只保留两位小数。%e
或%E
:用于以科学计数法表示浮点数。默认情况下,它会使用6位小数和指数形式。例如,printf("%e", 12345.6789);
将输出1.234568e+04
。%.ne
或%.nE
:其中n
是一个整数,用于指定要显示的小数位数。例如,printf("%.2e", 12345.6789);
将输出1.23e+04
,只保留两位小数,并以指数形式表示。
执行:
来源:计算三角形的周长和面积_牛客题霸_牛客网 (nowcoder.com)
一行,三角形 3 条边(能构成三角形),中间用一个空格隔开。
一行,三角形周长和面积(保留两位小数),中间用一个空格隔开,输出具体格式详见输出样例。
3 3 3
circumference=9.00 area=3.90
int main() { double a=0,b=0,c=0; double circumference=0.0;//周长 double area=0.0;//面积 scanf("%lf %lf %lf",&a,&b,&c); circumference=a+b+c; //海伦公式 double p=circumference/2; area=sqrt(p*(p-a)*(p-b)*(p-c)); printf("circumference=%.2lf area=%.2lf",circumference, area); return 0; }
解析:
注意,输入输出,照着公式写代码就行。这个题目,如果使用 float 来求解,答案的精度是不够的,所以试错后,使用 double 类型合适海伦公式:
来源:计算球体的体积_牛客题霸_牛客网 (nowcoder.com)
一行,用浮点数表示的球体的半径。
一行,球体的体积,小数点后保留 3 位。
3.0
113.097
#include
#include
int main() {
double r=0.0; //半径
double pi=3.1415926;//圆周率
scanf("%lf",&r);//输入半径
double V=(4.0/3)*pi*pow(r,3);//4后面小数点0 可以算出一位小数,pow的意思是r的3次方
//4/3执行整数除法
printf("%.3lf",V);
}
解析: ✨
注意,输入输出,照着公式写代码就行。这个题目,如果使用 float 来求解,答案的精度是不够的,所以试错后,使用 double 类型合适。这里要知道 float 和 double 为啥精度有区别,简单介绍一下。
float
是单精度浮点数类型,占用4个字节(32位),用于表示带有小数部分的实数。它可以表示大约6到7个有效数字,并具有约7位的十进制精度。double
是双精度浮点数类型,占用8个字节(64位),用于表示更大范围和更高精度的实数。它可以表示大约15到16个有效数字,并具有约15位的十进制精度。因此,
double
的精度比float
更高,可以表示更小的值和更大的值,同时具有更多的有效数字。但是,由于double
使用更多的存储空间,需要更多的计算资源和内存。在选择使用
float
还是double
时,需要根据具体的应用需求来决定。如果对精度要求不高,而且对内存和计算资源有限,可以使用float
。如果需要更高的精度或者处理范围更广的数据,可以选择double
执行:
来源:成绩输入输出_牛客题霸_牛客网 (nowcoder.com)
输入 3 科成绩,然后把三科成绩输出,成绩为整数形式。
一行,3科成绩,用空格分隔,范围(0~100)。
输出描述:
一行,把 3 科成绩显示出来,输出格式详见输出样例。
60 80 90
score1=60,score2=80,score3=90
#include
int main() {
int a=0,b=0,c=0;
//输入成绩
scanf("%d %d %d",&a,&b,&c);
//打印成绩
printf("score1=%d,score2=%d,score3=%d",a,b,c);
return 0;
}
写法二解析:
int score[3] = {0};
这行声明了一个名为score
的整数数组,大小为3个元素,并将所有元素初始化为0。这个数组将用于存储用户输入的三个分数。变量
i
被声明并初始化为0,它将用作循环计数器。
for
循环用于循环三次,每次循环读取一个分数。在每次迭代中,scanf
函数用于从用户输入中读取一个整数值,并将其存储在score[i]
中。&
运算符用于获取score[i]
的内存地址,以供scanf
存储输入值。读取完三个分数后,
printf
函数用于在控制台上显示这些分数。格式字符串"score1=%d,score2=%d,score3=%d"
指定了打印分数的格式,对应的值score[0]
、score[1]
和score[2]
被作为参数传递给printf
。最后,
return 0;
语句用于退出main
函数并终止程序的执行。
#include
int main(){
int score[3]={0};
int i=0;
for(i=0;i<3;i++)
{
scanf("%d",&score[i]);
}
printf("score1=%d,score2=%d,score3=%d",score[0],score[1],score[2]);
return 0;
}
来源:变种水仙花_牛客题霸_牛客网 (nowcoder.com)
变种水仙花数 - Lily Number:
把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number
655 = 6 * 55 + 65 * 51461 = 1 * 461 + 14 * 61 + 146 * 1
求出 5位数中的所有 Lily Number。
输入描述:
无
输出描述:
一行, 5 位数中的所有 Lily Number ,每两个数之间间隔一个空格
#include
int main() {
int i=0;
for(i=10000;i<99999;i++)
{ //判断i是否为Lily Number
int sum=0;
int j=0;
for(j=10;j<=10000;j=j*10)
{
sum+=(i/j)*(i%j);
}
if(i==sum)
{
printf("%d ",i);
}
}
return 0;
}
解析:先看这组数据
再看这组数据:
这就容易理解很多了。
代码执行:
来源:kiki算数_牛客题霸_牛客网 (nowcoder.com)
问题: KiKi 今年 5 岁了,已经能够认识 100 以内的非负整数,并且能够进行 100 以内的非负整数的加法计算。不过,BoBo 老师发现 KiKi 在进行大于等于 100 的正整数的计算时,规则如下:1. 只保留该数的最后两位,例如:对 KiKi 来说 1234 等价于 34 ;2. 如果计算结果大于等于 100 , 那么 KIKI 也仅保留计算结果的最后两位,如果此两位中十位为 0 ,则只保留个位。例如: 45 + 80 = 25要求给定非负整数 a 和 b ,模拟 KiKi 的运算规则计算出 a + b 的值。
一行,输入两个非负整数 a 和 b ,用一个空格分隔。( 0 <= a,b<= 231-1 )。
针对每组输入,输出按照 KiKi 的运算规则计算出 a+b 的值。
45 80
25
方法一:
两数分别取模然后再相加,防止其加起来是三位数,之和再取模100
int main() { //定义 int a=0,b=0; int sum=0; //输入 scanf("%d %d",&a,&b); //和 sum=(a%100+b%100)%100; printf("%d",sum); }
方法二:
两数先加起来,和之后%100,这个很好理解,无论加到多大,只要是大于等于2位数,%100也可以拿到那两位。
int main() { //定义 int a=0,b=0; int sum=0; //输入 scanf("%d %d",&a,&b); //和 sum=(a+b)%100; printf("%d",sum); }
方法三:
分类讨论:
- <100直接输出,a与b之和赋值给sum,直接打印sum
- >=100,a与b之和直接%100,赋值给sum,之后打印sum
int main() { int a=0,b=0; int sum=0; while(scanf("%d %d",&a,&b)!=EOF){ if(a+b<100) { sum=a+b; printf("%d",sum); } else if(a+b>=100) { sum=(a+b)%100; printf("%d",sum); } } return 0; }
方法一二三均可通过:
来源:浮点数的个位数字_牛客题霸_牛客网 (nowcoder.com)
给定一个浮点数,要求得到该浮点数的个位数。
数据范围: 0
输入描述:
一行,包括一个浮点数
输出描述:
一行,包含一个整数,为输入浮点数对应的个位数。
示例1
输入:13.141
输出:3
写法一:
定义一个浮点数,输入浮点数,强制转换成整型,并用整型变量n接收,打印这个n%10的值。
int main() { double d= 0; scanf("%lf", &d); int n = (int)d; printf("%d",n%10); return 0; }
写法二:
定义一个整型,输入浮点数,以整型的形式打印。
int main() { int n = 0; scanf("%d", &n); printf("%d", n % 10); }
来源:你能活多少秒_牛客题霸_牛客网 (nowcoder.com)
问题:一年约有 3.156×107 s,要求输入您的年龄,显示该年龄合多少秒。
数据范围: 0< age ≤200 0
输入描述:
一行,包括一个整数age。
输出描述:
一行,包含一个整数,输出年龄对应的秒数。
示例1
输入:20
输出:631200000
#include
int main() {
//定义
int age=0;
//输入年龄
scanf("%d",&age);
long long second=age*3.156e7;
//输出
printf("%lld\n",second);
return 0;
}
执行:
c训练营第三讲到此结束,感谢来访!