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


    目录

    第一题 平方根

    题目描述

    讲解:

    AC

    第二题 温度转换 

    题目描述

    讲解:

    AC

    第三题 计算机内存

    题目描述

    讲解:

    AC:

    第四题 四舍五入

    题目描述

    讲解:

    AC:

    第五题 加法模拟器

    题目描述

    讲解:

    AC:

    第六题 判断奇偶

    题目描述

    讲解:

    AC:

    第七题 一大一小

    题目描述

    讲解:

    AC:

    第八题 牛妹数

    题目描述

    讲解:

    AC:


    第一题 平方根

    题目描述

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

    比如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()向下取整函数,其内容在:http://t.csdn.cn/DTItE 的第七题上下取整里面;

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

    double sqrt(double x)

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

    AC

    C语言:

    1. #include
    2. #include
    3. int main()
    4. {
    5. int n, q = 0 ;
    6. scanf("%d",&n) ;
    7. q=floor(sqrt(n)) ;
    8. printf("%d",q) ;
    9. return 0;
    10. }

     运行结果:

    C++:

    1. #include
    2. #include
    3. using namespace std ;
    4. int main()
    5. {
    6. int n, q = 0 ;
    7. cin >> n ;
    8. q = floor(sqrt(n)) ;
    9. cout << q ;
    10. return 0 ;
    11. }

     运行结果: 

    第二题 温度转换 

    题目描述

    输入一个浮点数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语言:

    1. #include
    2. int main()
    3. {
    4. double n, c ;
    5. scanf("%lf", &n) ;
    6. c = (double)5/9*(n-32) ;
    7. printf("%.3lf", c) ;
    8. return 0 ;
    9. }

    运行结果:

    C++:

    1. #include
    2. using namespace std ;
    3. int main()
    4. {
    5. double n, c ;
    6. cin >> n ;
    7. c = (double)5/9*(n-32) ;
    8. printf("%.3lf", c) ;
    9. return 0 ;
    10. }

    运行结果: 

    第三题 计算机内存

    题目描述

    我们可以看到题目描述的上方有一个空间限制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语言:

    1. #include
    2. int main()
    3. {
    4. int n ;
    5. scanf("%d",&n) ;
    6. int s = n*1024*1024/4 ;
    7. printf("%d\n", s) ;
    8. return 0 ;
    9. }

     运行结果:

    C++:

    1. #include
    2. using namespace std ;
    3. int main()
    4. {
    5. int n ;
    6. cin >> n ;
    7. int s = n*1024*1024/4 ;
    8. cout << s << endl ;
    9. return 0 ;
    10. }

     运行结果: 

    第四题 四舍五入

    题目描述

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

    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语言:

    1. #include
    2. int main()
    3. {
    4. int n , m ;
    5. scanf("%d",&n) ;
    6. m=(n+5)/10*10 ;
    7. printf("%d",m) ;
    8. }

     运行结果:

    C++:

    1. #include
    2. using namespace std ;
    3. int main()
    4. {
    5. int n , m ;
    6. cin >> n ;
    7. m=(n+5)/10*10 ;
    8. cout << m ;
    9. }

     运行结果: 

    第五题 加法模拟器
     

    题目描述

    牛牛渐入佳境,他准备做一个加法模拟器来玩玩,输入两个数,分别打印这两个数的横式和竖式运算式子。

    输入描述:

    输入两个整数a, b 以空格隔开
    
    0 <= a, b <= 1000

    输出描述:

    第一行打印横式运算式子,接下来四行打印竖式运算式子

    示例1

    输入

    45 237

    输出

    1. 45+237=282
    2. 45
    3. + 237
    4. -------
    5. 282

    备注:

    注意printf的时候使用%xd来进行右对齐 ,x是一个数字

    讲解:

    这道题目的本质并不难,就是考一个加法,只不过这个输出比较有意思,他需要右对齐,也就是需要用到我们的%xd,那什么是%xd呢?

    %xd,其中这个x是你的输出长度,就是如果你想输出123,那你x取7的话,这样你输出的123前面就会有4个空格,那么这道题也是这样,只不过我们的第二行因为有+的存在我们前面的空格要比其他行数的少一个才对。

    AC:

    C语言:

    1. #include
    2. int main()
    3. {
    4. int a, b, c ;
    5. scanf("%d%d", &a, &b) ;
    6. c = a + b ;
    7. printf("%d+%d=%d\n", a, b, c) ;
    8. printf("%7d\n+%6d\n-------\n%7d",a,b,c) ;
    9. return 0;
    10. }

    运行结果:

    C++:

    1. #include
    2. using namespace std ;
    3. int main()
    4. {
    5. int a, b, c ;
    6. cin >> a >> b ;
    7. c = a + b ;
    8. cout << a << "+" << b << "=" << c << endl ;
    9. printf("%7d\n+%6d\n-------\n%7d",a,b,c) ;
    10. return 0;
    11. }

     运行结果:

    第六题 判断奇偶

    题目描述

    判断一个整数n是奇数还是偶数,如果是奇数,输出"odd", 否则输出"even"

    输入描述:

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

    输出描述:

    输出odd或者even

    示例1

    输入

    2

    输出

    even

    示例2

    输入

    1

    输出

    odd

    讲解:

    这道题目就是判断奇偶的,那我们的判断方法自然也就使用 ”%“ 了,一个数%2,那如果是0就为偶数;如果是1,就为奇数啦。

    可以注意到在代码中很有意思的一点是我在if语句中没有进行判断,也就是没有判断其取余是否等于0,但也可以ac,主要是因为我们这道题奇数就返回的是1,偶数就返回的是0,他已经给你分类好了,如果是奇数,返回1,if语句可以执行;如果是偶数,返回0,需要跳转到else语句中去进行实现。

    AC:

    C语言:

    1. #include
    2. int main()
    3. {
    4. int n ;
    5. scanf("%d",&n) ;
    6. if(n%2) printf("odd\n") ;
    7. else printf("even\n") ;
    8. return 0 ;
    9. }

     运行结果:

    C++:

    1. #include
    2. using namespace std ;
    3. int main()
    4. {
    5. int n ;
    6. cin >> n ;
    7. if(n%2) cout << "odd" << endl ;
    8. else cout << "even" << endl ;
    9. return 0 ;
    10. }

    运行结果:

    第七题 一大一小

    题目描述

    输入两个整数X,Y,通过交换将大的数放在X中,小的数放在Y中。

    输入描述:

    输入一行,包含两个整数X,Y

    输出描述:

    输出两行,每行一个整数,输出交换后的X, Y

    示例1

    输入

    4 5

    输出

    1. 5
    2. 4

    讲解:

    这道题目想考察的知识点是我们如何进行两个数的交换,交换两个数的方法是,我们先创建第三个变量,将第一个变量的值赋给第三个变量,然后将第二个变量的值赋给第一个变量,紧接着我们将第三个变量的值赋给第二个变量就可以了。

    当然这道题目出的确实挺憨的,因为我们不用上面那种交换也可以完成,就像我C++写的代码一样,我们输入时的顺序和我们输出时的顺序一对调,我们不就可以完成了嘛!但是我们写题是为了掌握知识,所以这道题考察的知识点我们还是一点要学会掌握的,不要为了写题而写题。

    AC:

    C语言:

    1. #include
    2. int main()
    3. {
    4. int x, y, tmp ;
    5. scanf("%d%d",&x, &y) ;
    6. tmp = x ;
    7. x = y ;
    8. y = tmp ;
    9. printf("%d\n%d",x, y) ;
    10. return 0 ;
    11. }

    运行结果:

    C++:

    1. #include
    2. using namespace std ;
    3. int main()
    4. {
    5. int x, y ;
    6. cin >> x >> y ;
    7. cout << y << endl << x ;
    8. return 0 ;
    9. }

    运行结果: 

    第八题 牛妹数

    题目描述

    如果一个数是一个偶数而且大于50,我们称它为牛妹数

    给你一个数,判断它是否是牛妹数

    输入描述:

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

    输出描述:

    如果是牛妹数,输出"yes", 否则输出"no"

    示例1

    输入

    50

    输出

    no

    示例2

    输入

    52

    输出

    yes

    讲解:

    这道题目事项考察我们关系逻辑运算符的,也就是其中的一个”&&"的。首先我们已经知道一个属取余2为1是奇数,为0是偶数了,然后”&&"它的意思是,逻辑与运算符。如果两个操作数都非零,则条件为真。也就是A && B ,当A和B同时为真的时候,这个A && B才为真。

    所以我们可以利用这个运算符,使其去满足n为偶数且n大于50的条件了。

    AC:

    C语言:

    1. #include
    2. int main()
    3. {
    4. int n ;
    5. scanf("%d",&n) ;
    6. if(n%2 == 0 && n>50) printf("yes\n") ;
    7. else printf("no\n") ;
    8. return 0 ;
    9. }

    运行结果:

    C++:

    1. #include
    2. using namespace std ;
    3. int main()
    4. {
    5. int n ;
    6. cin >> n ;
    7. if(n%2==0 && n>50) cout << "yes" << endl ;
    8. else cout << "no" << endl ;
    9. return 0 ;
    10. }

    运行结果: 

    好啦,本篇的题目到这里也就结束了,也希望大家都能掌握上面的题目,去复习巩固C/C++基础知识。在这里想问一下大家,你认为学编程语言需要刷题吗?

  • 相关阅读:
    ARM DIY(九)陀螺仪调试
    ElasticSearch-head前端安装以及连接ES基本步骤(linux)
    【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 最小配对和(100分) - 三语言AC题解(Python/Java/Cpp)
    最全面的UI知识图谱推荐
    elementplus修改为中文组件
    1.1.1 linux基础
    Spring的简单使用(3)
    [附源码]计算机毕业设计springboot基于SpringBoot的演唱会购票系统论文2022
    重学SpringBoot3-整合SSM
    【Java面试】第三章:P6级面试
  • 原文地址:https://blog.csdn.net/qq_62464995/article/details/126573467