1.栅栏作画
题目大意:给定两个点,算出其中的所包含的不同的数(首尾不算)
【输入输出样例1】
paint.in | paint.out |
7 10 4 8 | 6 |
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,c,d,e[1000]={},s=0;
cin>>a>>b;
cin>>c>>d;
for(int i=a;i<=b-1;i++)
{
e[i]=1;
s=s+1;
}//将a到b之间的数进行标记
for(int i=c;i<=d-1;i++)
if(e[i]==0)
{
e[i]=1;
s=s+1;
}//如果点还未被标记,则计数器加1
cout<<s<<endl;
return 0;
}
2.失去的母牛
题目大意:给定两个点x,y,每移动一步就是上一步距离起点的2倍,(x+1,x-2,x+4),问移动多少步才能从x到y。
有3种情况:
x=y,x<y,x>y
注:x不会因为加减而改变
输入输出样例
输入样例:
3 6
输出样例:
9
#include<bits/stdc++.h>
using namespace std;
int main()
{
int x,y,t,l,s=0,r;
cin>>x>>y;
if(x==y)
{
cout<<0<<endl;
return 0;
}//如果x=y,就一步也不用走
if(x>y)
{
x=x+y;
y=x-y;
x=x-y;
l=-1;
}如果x>y,就交换x和y,使情况变成和x<y一样,但要改变方向
else l=1;
r=0;
while(true)
{
if(x+l==y)//如果走完这一次刚好到达目的地
{
s=s+abs(r-l);
break;
}
if(x+l>y)//如果走完这一次大于目的地
{
s=s+abs(r-abs(x-y));
break;
}
s=s+abs(r-l);
r=l;
l=l*(-2);
}
cout<<s<<endl;
return 0;
}