第一题
已知a和b,求出a^b的个位数。
输入包含多组测试用例。
每组测试用例,包含两个数组a和b(0<a,b<=2^30)。
对于每组测试用例,你需要输出a^b的个位数。
#include<cstdio>
int main()
{
int a,b,sum;
while(scanf("%d%d",&a,&b)!=EOF)
{
a=a%10;sum=1;
for(int i=1;i<=b;i++)
{
sum=sum*a%10;
}
printf("%d\n",sum);
}
return 0;
}
这种方法按道理来说是会超时的,因为a,b的数据有够大,复杂度超过10^9,会超时,但是没想到同一个题,不同oj运行竟然能过,但是为了保证正确率,还是选择下一种方法,快速幂运算。
#include<cstdio>
int main()
{
int a,b,sum;
while(scanf("%d%d",&a,&b)!=EOF)
{
a=a%10;sum=1;
while(b)
{
if(b&1)
{
sum=sum*a%10;
}
a=a*a%10;
b>>=1;
}
printf("%d\n",sum);
}
return 0;
}
b换成二进制形式,与1与,大大降低了复杂度。第二题
110010
11
11010
#include<cstdio>
#include<cstring>
char ss[100005],bb[100005];
int main()
{
while(scanf("%s",ss)!=EOF)
{
int len=strlen(ss);
int j=0,f=1;
for(int i=0;i<len-1;i++)
{
bb[j]=ss[i];
if(ss[i]=='0'&&f)
{
bb[j]=ss[i+1];
i++;
f=0;
}
j++;
}
if(j!=len-1)
{
bb[j++]=ss[len-1];
}
bb[j]='\0';
printf("%s\n",bb);
}
return 0;
}
第三题
0 3 4 0
#include<cstdio>
#include<cmath>
int main()
{
int t;
double x1,y1,x2,y2,sum;
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
sum=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
sum=sqrt(sum);
printf("%.2lf\n",sum);
}
return 0;
}
运用距离公式即可。第四题
想要取到所有的苹果,这个人能走的最短的路程是多少。
每组数据的第一行有一个整数n(0 ≤ n ≤ 10000)。
第二行包括 n 个整数ai (−10000 ≤ ai ≤ 10000),代表每个苹果树的位置。
-1 1
#include<cstdio>
#include<algorithm>
using namespace std;
int ss[10001];
int main()
{
int n,sum,sum1;
while(scanf("%d",&n)!=EOF)
{
sum=0;
if(n==0)
{
printf("%d\n",sum);
continue;
}
for(int i=0;i<n;i++)
scanf("%d",&ss[i]);
sort(ss,ss+n);
if(ss[0]>=0) sum=ss[n-1];
else
if(ss[n-1]<=0) sum-=ss[0];
else
{
sum=2*ss[n-1]-ss[0];
sum1=ss[n-1]-2*ss[0];
if(sum1<sum)
sum=sum1;
}
printf("%d\n",sum);
}
return 0;
}
第五题
第六题
有一个工艺品,这个工艺品是由一个实心铜球和一个恰好穿过中心钻出的圆柱孔组成。相关参数只有这个孔的高h。(如图所示,是该工艺品的截面)。 要求求出这个工艺品的体积。
Input
有多组输入数据,每组数据只有一个h值。
输出这个工艺品的体积。(保留两位有效数字)。
π 取3.1415926
#include<cstdio>
#define PI 3.1415926
int main()
{
double h,sum;
while(scanf("%lf",&h)!=EOF)
{
sum=PI*h*h*h/6;
printf("%.2lf\n",sum);
}
return 0;
}
纯数学题,用积分算出结果即可。第七题
1、 每次只能移动一格;
2、 你可以向左走,可以向右走,也可以向上走,但是不可以向下走。
3、 走过的格子立即塌陷无法再走第二次;
求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。
接下来的T行,每行包含一个整数n (n<=20),表示要走n步。
每组的输出占一行。
2
1
2
3
7
#include<cstdio>
int ff[22];
int main()
{
int t,n;
ff[0]=0;ff[1]=3;ff[2]=7;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=3;i<=n;i++)
ff[i]=2*ff[i-1]+ff[i-2];
printf("%d\n",ff[n]);
}
return 0;
}
这是一道递推题,找出公式即可。