一些数学题

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
有n个地方,编号为1->n,任意两个地方有公交车,从i到j的票价为(i+j)mod(n+1),而且这个票可以用无限次,你要把这些地方全部走一遍,问最小花费为多少。可以在任意地方开始和结束。

从头到最后,余数为0,再到第二个,余数为1 

#include<iostream>
using namespace std;

int main()
{
    int n,ans;
    cin>>n;
    if(n%2==0)
        ans=(n-1)/2;
    else
        ans=n/2;
    
    cout<<ans;
    
    return 0;
}

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

珂朵莉想每天都给威廉送礼物,于是她准备了n个自己的本子

她想送最多的天数,使得每天至少送一个本子,但是相邻两天送的本子个数不能相同

珂朵莉最多送几天礼物呢

从第一天开始1,2,1,2,1,2......

#include<iostream>
using namespace std;

int main()
{
    int n;
    cin>>n;
    int res;
    if(n%3!=0)
        res=n/3*2+1;
    else
        res=n/3*2;
    
    cout<<res;
    
    return 0;
}

 链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

Kaiji正在与另外一人玩石头剪刀布。双方各有一些代表石头、剪刀、布的卡牌,每局两人各出一张卡牌,根据卡牌的内容决定这一局的胜负。胜负规则为:石头赢剪刀、剪刀赢布、布赢石头、相同为平局。每张卡牌至多被使用一次。

已知双方的卡牌数量,问Kaiji最多赢几局?

石头对剪刀,剪刀对布,布对石头中的最小值相加 

#include<iostream>
using namespace std;

struct person
{
    int stone;
    int scissors;
    int cloth;
};

int main()
{
    struct person p1,p2;
    cin>>p1.stone>>p1.scissors>>p1.cloth>>p2.stone>>p2.scissors>>p2.cloth;
    int sum=0;
    sum=sum+(p1.stone<p2.scissors?p1.stone:p2.scissors)
        +(p1.cloth<p2.stone?p1.cloth:p2.stone)
        +(p1.scissors<p2.cloth?p1.scissors:p2.cloth);
    
    cout<<sum;
    
    return 0;
}

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

小w想和你van纸牌

小w有两张纸牌,两张纸牌上都有相同的正整数n

每一轮一张纸牌上的数都可以减去小于等于另外一张纸牌上的数的数

每一轮只能操作和上轮不同的纸牌

小w想知道三轮之后两纸牌上数字之和的最小值

注意,不能减为负数

一半一半减

#include<iostream>
using namespace std;

int main()
{
    int n;
    cin>>n;
    if(n%2==0)
        cout<<n/2;
    else
        cout<<(n+1)/2;
    
    return 0;
}

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

白兔学会了分身术。

一开始有一只白兔,接下来会进行k轮操作,每一轮中每一只白兔都会变成p只白兔。

要求k轮后白兔的总数恰好为n。

要求找到两个正整数p,k,最大化p+k

p^k=n,令t=p+k则 t=[n^(1/k)]+k

指数函数变化快于幂函数,所以k取1时t最大,即t=n+1             

#include<iostream>
using namespace std;

int main()
{
    long n;//数太大,int不行
    cin>>n;
    cout<<n+1;
    
    return 0;
}

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
现在牛可乐获得了这三位EVA驾驶员的战斗力之积,在保证三位驾驶员战斗力均为正实数的情况下,请你帮助牛可乐计算这三位驾驶员的战斗力之和最低是多少?

基本不等式a1+a2+...+an>=n*[(a1*a2*...*an)^(1/n)]

#include<iostream>
#include<math.h>
using namespace std;

int main()
{
    int n;
    cin>>n;
    double res=pow(n,1.0/3.0)*3.0;
    printf("%.3lf",res);
    
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值