【牛客刷题】带你在牛客刷题第四弹(C/C++语言基础)上

简介: 笔记

第一题 平方根


题目描述

输入一个整数, 求它的平方根,输出答案往下取整.


比如5=2\sqrt{5} = 25=2, 16=4\sqrt{16}=416=4


输入描述:


输入一个整数n (1 <= n <= 100000)

输出描述:


输出一个整数

示例1


输入

5

输出

2


示例2


输入

16

输出

4


讲解:

通过读题我们发现,如果我们在不调用其他函数的情况下,我们要使用循环去写这个题目,也就是从1-n开始逐次循环,对于每一个数,都要判断其平方于n的大小关系,选择第i个小于等于n且第i+1个是大于n的数就可以了,这听起来并不困难,但是我们还有没有更简便的方法去让我们解决这个问题呢?


答案当然是有的,那就是调用math库里面的函数,第一个就是我们之前牛客刷题系列之中所提到的floor()向下取整函数


第二个就是sqrt()函数,sqrt() 函数的声明是:

double sqrt(double x)

sqrt()函数返回 x 的平方根。所以对于这道题目,我们就可以使用sqrt函数先求出x的平方根,之后再调用floor函数去向下取整就可以了。


AC

C语言:

#include<stdio.h>
#include<math.h>
int main()
{ 
    int n, q = 0 ; 
    scanf("%d",&n) ; 
    q=floor(sqrt(n)) ;  
    printf("%d",q) ; 
    return 0;
    }

运行结果:

1.png

C++:

#include<iostream>
#include<cmath>
using namespace std ;
int main()
{ 
    int n, q = 0 ; 
    cin >> n ;
    q = floor(sqrt(n)) ;  
    cout << q ; 
    return 0 ;
    }


运行结果: 2.png




第二题 温度转换


题目描述

输入一个浮点数f, 表示华氏温度, 输出对应的摄氏温度c , c=5/9*(f-32)


输入描述:


输入一个浮点数f(1 <= f<= 100000)

输出描述:


输出浮点数,保留3位小数

示例1


输入

100

输出

37.778


讲解:

通过我们读题发现这道题目的题意很简单,连题目中公式都给你准备好啦,看似我们直接按照他的要求套入公式即可,但是其实这道题目有两点坑:


第一点,数据范围,我们在进行解决的时候首先会想到float类型,但是通过我们观察数据发现,由于精度原因我们并无法完全使用float,这时我们就要使用高精度的double去进行解决。


第二点,就是5/9得出的结果是默认整型的,但是这样就等于0了,所以我们要将其变为浮点型,那么我们有两种方式将其变为浮点型 : 1, 用5.0/9 因为这时的5变为5.0,出现了浮点型,所以才会输出浮点型的结果,当然我们将9改为9.0也是一样的道理。2,我们完全可以使用前面所提到的强制转换类型去进行解决这个难题,直接将其类型强制转换一下就可以解决了。


AC

C语言:


#include<stdio.h>
int main()
{
    double n, c ;
    scanf("%lf", &n) ;
    c = (double)5/9*(n-32) ;
    printf("%.3lf", c) ;
    return 0 ;
}

运行结果:

3.png



C++:

#include<iostream>
using namespace std ;
int main()
{
    double n, c ;
    cin >> n ;
    c = (double)5/9*(n-32) ;
    printf("%.3lf", c) ;
    return 0 ;
}


运行结果:

4.png



第三题 计算机内存


题目描述

我们可以看到题目描述的上方有一个空间限制32M, 在计算机中一个整数占据4个字节的内存, 1MB等于1024KB, 1KB等于1024B, 1B就代表1字节, 那么请问n MB的内存可以使用多少个整数呢?


输入描述:


输入一个整数n,表示内存大小(MB) 1<=n<=256

输出描述:


输出一个整数

示例1


输入

1

输出

262144


讲解:

其实这道题目只是考察了你一个关于内存的基础知识,题目中也提到了1MB等于1024KB, 1KB等于1024B, 1B就代表1字节但是题目很恶心的是,他就差最后一句忘记告诉你了,就是一个整数占据4个字节;当你知道这句话的时候,是不是就突然觉得很简单了,就是用我们的输入去乘上两个1024然后再除以4就可以完美解决问题了。


AC:

C语言:


#include<stdio.h>
int main()
{
    int n ;
    scanf("%d",&n) ;
    int s = n*1024*1024/4 ;
    printf("%d\n", s) ;
    return 0 ;
}

运行结果:

5.png



C++:


#include<iostream>
using namespace std ;
int main()
{
    int n ;
    cin >> n ;
    int s = n*1024*1024/4 ;
    cout << s << endl ;
    return 0 ;
}

运行结果:

6.png



第四题 四舍五入


题目描述

牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下


12345->12350


12399->12400


输入描述:


输入一个整数n(0<=n<=1090<=n<=10^90<=n<=109)


输出描述:


输出一个整数

示例1


输入


99

输出


100


讲解:

对于这道题目,我相信你读完题目肯定是想先让输入的数取余10,去判断那个数是否大于5,然后如果大就补齐;确实这种是你本能能判断出来的方法,这样也确实可以解这道题目,但是我们有没有更巧妙的方法去解呢?答案当然是有的,我们可以使用int的特性去解。


具体如下,我们先对我们需要四舍五入的数进行+5,这个+5就是如果需要进位的数,他就会进到十位,如果不需要进位的数,就算+5也对十位没有影响,这时我们再去除以10,这个除以10就很灵性了,因为int他要舍去小数点后的位数,所以之前的个位上的数就全部没有了,之前的十位就成个位了,然后我们再去乘以10就完成我们的目标了。


你仔细品一下,这个方法是不是很妙,将进位不在只单独的想成%的方法,而是用加5进十位然后消个位的方法去写,这也是算法的魅力啊。


AC:

C语言:


#include<stdio.h> 
int main()
{
    int n , m ;
    scanf("%d",&n) ;
    m=(n+5)/10*10 ; 
    printf("%d",m) ;
    }

运行结果:

7.png



C++:


#include<iostream>
using namespace std ;
int main()
{
    int n , m ;
    cin >> n ;
    m=(n+5)/10*10 ; 
    cout << m ;
    }

运行结果:

8.png

相关文章
|
3月前
|
C++
C++ 语言异常处理实战:在编程潮流中坚守稳定,开启代码可靠之旅
【8月更文挑战第22天】C++的异常处理机制是确保程序稳定的关键特性。它允许程序在遇到错误时优雅地响应而非直接崩溃。通过`throw`抛出异常,并用`catch`捕获处理,可使程序控制流跳转至错误处理代码。例如,在进行除法运算或文件读取时,若发生除数为零或文件无法打开等错误,则可通过抛出异常并在调用处捕获来妥善处理这些情况。恰当使用异常处理能显著提升程序的健壮性和维护性。
76 2
|
3月前
|
算法 C语言 C++
C++语言学习指南:从新手到高手,一文带你领略系统编程的巅峰技艺!
【8月更文挑战第22天】C++由Bjarne Stroustrup于1985年创立,凭借卓越性能与灵活性,在系统编程、游戏开发等领域占据重要地位。它继承了C语言的高效性,并引入面向对象编程,使代码更模块化易管理。C++支持基本语法如变量声明与控制结构;通过`iostream`库实现输入输出;利用类与对象实现面向对象编程;提供模板增强代码复用性;具备异常处理机制确保程序健壮性;C++11引入现代化特性简化编程;标准模板库(STL)支持高效编程;多线程支持利用多核优势。虽然学习曲线陡峭,但掌握后可开启高性能编程大门。随着新标准如C++20的发展,C++持续演进,提供更多开发可能性。
82 0
|
1月前
|
算法 C++
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
37 5
|
1月前
|
存储 编译器 C语言
深入计算机语言之C++:类与对象(上)
深入计算机语言之C++:类与对象(上)
|
1月前
|
存储 分布式计算 编译器
深入计算机语言之C++:C到C++的过度-2
深入计算机语言之C++:C到C++的过度-2
|
1月前
|
编译器 Linux C语言
深入计算机语言之C++:C到C++的过度-1
深入计算机语言之C++:C到C++的过度-1
|
2月前
|
JavaScript 前端开发 测试技术
一个google Test文件C++语言案例
这篇文章我们来介绍一下真正的C++语言如何用GTest来实现单元测试。
21 0
|
3月前
|
编译器 C++ 容器
C++语言的基本语法
想掌握一门编程语言,第一步就是需要熟悉基本的环境,然后就是最重要的语法知识。 C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。 类 - 类可以定义为描述对象行为/状态的模板/蓝图。 方法 - 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。 即时变量 - 每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。 完整关键字
|
4月前
|
前端开发 编译器 程序员
协程问题之为什么 C++20 的协程代码比其他语言的协程 demo 长很多如何解决
协程问题之为什么 C++20 的协程代码比其他语言的协程 demo 长很多如何解决
|
5月前
|
存储 Java C#
C++语言模板类对原生指针的封装与模拟
C++|智能指针的智能性和指针性:模板类对原生指针的封装与模拟