数学题
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;
}