B题:
如果价格比n张5元总和小的话,5元的张数即为价格除5,1元的张数为余数。
如果价格比n张五元总和小的话,五元的张数几位n,1元的张数为价格减去所有5元的总量。
#include<stdio.h>
int main()
{
long long n,i,m;
scanf("%lld %lld",&n,&m);
if(5*n>m)
printf("%lld %lld",m/5,m%5);
else
printf("%lld %lld",n,m-(5*n));
}
C题:
巴什博弈问题,共有n个石子,每次最多取m个,如果n能整除m+1则后手赢,否则先手赢。
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n%4==0)
printf("bob");
else
printf("kiki");
return 0;
}
D题:
找出最小的桃数到最大的桃数中对7求余的最大值即可。
#include<stdio.h>
int main()
{
long long n,L,R,i,a[1000]={0},k=0,max;
scanf("%lld %lld %lld",&n,&L,&R);
a[0]=a[0]+L%n;
for(i=L+1;i<=R;i++)
{
if(i%n==0)
k++;
else
a[k]++;
}
max=a[0];
for(i=1;i<=k;i++)
{
if(a[i]>max)
max=a[i];
}
printf("%lld",max);
}
E题:
如果是奇数无法拆分,输出-1;如果是偶数找到不大于n的最大2的正整次幂,再使n减去这个数,重新找不大于n的最大2的正整次幂,直到n可以除尽这个正整次幂。
#include<iostream>
using namespace std;
int main()
{
long long n;
cin>>n;
long long i=0,a[1000]={0},b=1,k=n,j;
while(1)
{
b=b*2;
if(k%2==1)
{
cout<<"-1"<<endl;
break;
}
if(b==n)
{
a[i]=b;
i++;
break;
}
else if(b*2>n)
{
a[i]=b;
i++;
n=n-b;
b=1;
}
}
if(k%2==0)
for(j=0;j<i;j++)
{
printf("%lld ",a[j]);
}
}
F题:
每次比较原字符串的首尾,输出ASCII码较低的一个字符,如果两字符ASCII码相同,则继续比较下一位,每次输出首位置的字符后,首位置向后进一,每次输出尾位置的字符后,尾位置向后进一。最多循环n次,如果首尾位置相同,则为最后一次循环,此次执行后终止循环。
#include<iostream>
#include<string.h>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i=0,j=-1,k,z,sum1=0,sum2=0,f;
scanf("%d",&n);
char a[n],b[n];
k=n=n-1;
scanf("%s",&a);
while(j<k)
{
j++;
if(a[i]>a[n])
{
printf("%c",a[n]);
n--;
}
else if(a[i]<a[n])
{
printf("%c",a[i]);
i++;
}
else if(a[i]==a[n])
{
for(f=0;;f++)
{
if(i==n)
{
printf("%c",a[i]);
break;
}
if(a[i+f]<a[n-f])
{
printf("%c",a[i]);
i++;
break;
}
if(a[i+f]>a[n-f])
{
printf("%c",a[n]);
n--;
break;
}
}
}
}
}
G题:
如果三点在同一直线上,且bug坐标位于A,B的坐标中间则需绕开bug,最短路径长度为A,B的X坐标差的绝对值加Y坐标的差的绝对值再加2,否则无需绕开,最短长度为A,B的X坐标差的绝对值加Y坐标的差的绝对值。
#include<stdio.h>
#include<math.h>
int main()
{
int n,xA,yA,xB,yB,xP,yP,i,temp;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d",&xA,&yA);
scanf("%d %d",&xB,&yB);
scanf("%d %d",&xP,&yP);
if(xA<xB)
{
temp=xA;
xA=xB;
xB=temp;
}
if(yA<yB)
{
temp=yA;
yA=yB;
yB=temp;
}
if(xA==xB&&xB==xP)
{
if(yP<yA&&yP>yB)
{
printf("%d\n",(abs(yA-yB)+2));
continue;
}
else
{
printf("%d\n",abs(yA-yB));
continue;
}
}
if(yA==yB&&yB==yP)
{
if(xP<xA&&xP>xB)
{
printf("%d\n",(abs(xA-xB)+2));
continue;
}
else
{
printf("%d\n",abs(xA-xB));
continue;
}
}
if((yA==yB&&yB==yP)!=1&&(xA==xB&&xB==xP)!=1)
{
printf("%d\n",abs(yA-yB)+abs(xA-xB));
continue;
}
}
}
J题:
跳到第i的瓷砖,最大可到达的瓷砖为i+Ai;维护可到达瓷砖的最大值即可,如果最大到达第i的瓷砖且这个瓷砖的Ai小于等于0,则此瓷砖为最大的到达的瓷砖位置。
#include<stdio.h>
int main()
{
long long i,n,x,a[1000000],max;
scanf("%lld",&n);
for(i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
max=1+a[1];
for(i=1;i<=n;i++)
{
if((a[i]+i)>=max)
max=a[i]+i;
if(i==max&&a[i]<=0)
break;
}
if(max>n)
max=n;
printf("%lld",max);
}
H题:
计算每个小球距离两端点距离的最大值,寻找这些最大值的最大值即为掉下所需的最长时间。
计算每个小球距离两端点距离的最小值,寻找这些最小值的最大值即为掉下所需的最短时间。
这里定义MAX变量是最短时间,MIN是最长时间。
#include <bits/stdc++.h>
using namespace std;
int l,n,a[1000000],b[1000000],c[1000000],i,MIN,MAX;
int main()
{
int max(int,int);
int min(int,int);
scanf("%d",&l);
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
c[i]=max(l-a[i],a[i]);
}
MIN=c[0];
for(i=0;i<n;i++)
{
if(c[i]>MIN)
MIN=c[i];
}
for(i=0;i<n;i++)
{
b[i]=min(l-a[i],a[i]);
}
MAX=b[0];
for(i=1;i<n;i++)
if(b[i]>MAX)
MAX=b[i];
printf("%d %d",MAX,MIN);
}
int max(int a,int b)
{
if(a>b)
return a;
if(a<b);
return b;
if(a==b);
return a;
}
int min(int a,int b)
{
if(a>b)
return b;
if(a<b);
return a;
if(a==b);
return a;
}
I题:
每次比分的最小值与与上一次比分中的最小值i比较,如果i小于这次比分的最小值就继续比较,同分的次数+1,直到两数相等。如果每次输入的比分已经相同,不要让i赋值这个数,继续保持最大值+1,否则下次比较会多比较一次这个数。
#include<stdio.h>
int main()
{
long long i=0,j=0,count=0,n,k,I=0,J=0,x,y;
int max(int,int);
int min(int,int);
scanf("%lld",&n);
for(k=0;k<n;k++)
{
scanf("%lld %lld",&x,&y);
if(k>0)
if(x==I&&y==J)
continue;
while(1)
{
if((i==j)&&i<=x&&j<=y)
{
i++;j++;
count++;
continue;
}
else
break;
}
I=x;J=y;
if(i<=max(x,y))
{
i=max(x,y);j=max(x,y);
}
}
printf("%lld",count);
return 0;
}
int max(int a,int b)
{
if(a>b)
return a;
else if(a<b)
return b;
else
return a;
}
int min(int a,int b)
{
if(a<b)
return a;
else if(a>b)
return b;
else
return a;
}