数学题(蓝桥杯)

数学题

1.买不到的数目

题意:

输入俩个数a,b,a和b最大不能组合的数字。

例如:4,7 最大不能组合的数字是17

思路

本题就考一个公式:p*q-p-q

代码:

#include <iostream>

using namespace std;

int main()
{
    int p,q;
    cin>>p>>q;
    cout<<p*q-q-p<<endl;
    
    return 0;
}

2. 蚂蚁感冒

题意:

长 100100 厘米的细长直杆子上有 nn 只蚂蚁。它们的头有的朝左,有的朝右。每只蚂蚁都只能沿着杆子向前爬,速度是 11 厘米/秒。当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。这些蚂蚁中,有 11 只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。

思路:

这题难点就在于一定要相通,将蚂蚁相遇掉头看成蚂蚁穿过对方继续前进。这点想清楚了,题目就不难了。先考虑俩个特殊情况,当第一只蚂蚁向右走,且右边没有向左走的蚂蚁时,此时就第一只蚂蚁感染。当第一只蚂蚁向左走,且左边没有向右走的蚂蚁时,就第一只蚂蚁感染。

然后就每次统计第一只蚂蚁左边有多少蚂蚁,右边有多少蚂蚁就可以了。

代码:

#include <iostream>
#include <algorithm>

using namespace std;
const int N=55;

int a[N];

int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
        
    int left=0,right=0;
    for(int i=1;i<n;i++)
    {
        if(abs(a[i])>abs(a[0]) && a[i]<0) right++;
        if(abs(a[i])<abs(a[0]) && a[i]>0) left++;
    }
    
    if((a[0]>0 && right==0) || (a[0]<0 && left==0)  ) printf("1");
    else
        printf("%d",left+right+1);
        
    return 0;
    
}

3.饮料换购

题意:

乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账)。那么,对于他初始买入的 n 瓶饮料,最后他一共能喝到多少瓶饮料。

思路:

模拟一遍,喝完n之后求出有多少个3,然后更新n为换购的加上余下的。

代码:

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin>>n;
    
    int ans=n;
    while(n/3)
    {
        int t=n/3;
        ans+=t;
        n=t+n%3;
    }
    
    cout<<ans<<endl;
    
    return 0;
    
}
发布了75 篇原创文章 · 获赞 8 · 访问量 1260

猜你喜欢

转载自blog.csdn.net/qq_40905284/article/details/104889833