1月8日刷题

18839/1036

题目描述

这场比赛需要两人一队组队参加,他们不知道怎么分组。已知他们的 CrossFire 分数分别为 a, b, c, d,现在想要把他们两两分为一队,使得他们的实力比较平均,也就是两队的实力差尽量小。
这里定义两队的实力差为每队的 CrossFire 分数之和的差值,现在他们想要知道这个实力差最小是多少。

解法

有两种解法,第一种,先对数据进行排序,然后可以判断出,分数差的最小值是最大的与最小的数据之和减去中间两个数值,要注意的是,差值要求是正数。第二种直接列出数据差的几种情况,然后对其比较,输出最小的值就可以了

18839/1037

题目描述



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

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

输入描述:

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

输出描述:

输出一个整数

这里要注意数据的范围最大到100000要用long long int取存取数据,题目中要求向下取整,需要用到一个强制类型转换,代码如下

#include<stdio.h>
#include<math.h>
int main()
{
    long long n,i;

    scanf("%lld",&n);
    i = (int)sqrt(n);

    printf("%lld",i);
    return 0;
}

18839/1038

题目描述

给出共享长方体一个顶点的三个面的面积,求它十二条边的边长和。

输入描述:

一行三个整数a, b, c表示面积(1 <= a, b, c <= 10000)。

输出描述:

一行一个整数表示边长和。

此题主要用到数学知识解题

设边长分别为xyz,那么a=x*y,b=y*z,c=x*z

要求出xyz的和,可以将他们先平方

得到(x+y+z)^2=x^2+y^2+z^2+2xy+2yz+2zx

这样可以发现后面的三项就是abc的和的二倍了

然后就是要求出xyz分别的平方(很难想到了QAQ)

c  

这样就可以求出(x+y+z)辣

讲到这块还能想到一种办法,因为刚求x^2是x^2=(xy*zx)/yz=a*c/b 

那么x=sqrt(a*c/b),其实这样也可以的哦

那么代码如下

1.第一种办法

#include <stdio.h>
#include <math.h>
 
int main ()
{
    int a,b,c,ans;
    scanf("%d%d%d",&a,&b,&c);
    ans=4*sqrt(a*b/c+a*c/b+b*c/a+(a+b+c)*2);
    printf("%d\n",ans);
 
    return 0;
}

2.第二种方法

#include <stdio.h>
#include <math.h>
int main(){
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);
    printf("%.0f", 4 * (sqrt(a * b / c) + sqrt(a * c / b) + sqrt(b * c / a)));
    return 0;
}

这里还要强调一下sqrt()这个函数,他的返回值是一个双精度浮点数,直接用printf和%d输出浮点数的值都会是0,这里可以做一个强制类型转换,将求完的平方根转化为int类型进行输出

或者像第二个代码一样,去输出没有小数部分的浮点数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值