目录
1090:题目描述 求A^B的最后三位数表示的整数(1<=A,B<=1000)
1.1
1090:题目描述
求A^B的最后三位数表示的整数(1<=A,B<=1000)
输入
第一行输入一个整数n,表示有n个测试实例,接着有n行,每行一个实例,给出两个正整数A,B
输出
针对每个测试实例,输出A^B的最后三位(没有前导0) ,单独占一行。
1.2
答案:
第一思路:用pow函数,但是指数1000溢出(pow函数中,底数,指数,输出数字均为double型,%为int型)
#include<stdio.h>
#include<math.h>
int main()
{
double n,a,b,c;
scanf("%lf",&n);
for(n; n>=1; n--)
{
scanf("%lf%lf",&a,&b);
c=pow(a,b);
if(c<=999)
printf("%.0lf\n",c);
else
printf("%d\n",(int)c%1000);
}
return 0;
}
换方式:正常求,指数个底数相乘
#include<stdio.h>
int main()
{
int n,a,b,sum=1,i;
scanf("%d",&n);
for(n; n>=1; n--)
{
scanf("%d%d",&a,&b);
for(i=1; i<=b; i++)
{
sum=sum*a;
sum=sum%1000;
}
printf("%d\n",sum);
sum=1;
}
return 0;
}
2.1
1091:题目描述
Redraiment小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去。 但年幼的他一次只能走上一阶或者一下子蹦上两阶。 现在一共有N阶台阶,请你计算一下Redraiment从第0阶到第N阶共有几种走法。
输入
输入包括多组数据。 每组数据包括一行:N(1≤N≤40)。 输入以0结束
输出
对应每个输入包括一个输出。 为redraiment到达第n阶不同走法的数量。
2.2
答案:
递归版
注:oj超时。
#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n),n!=0)
printf("%d\n",f(n));
return 0;
}
int f(int x)
{
if(x==1)
return 1;
else if(x==2)
return 2;
else
return f(x-2)+f(x-1);
}
思路(划重点):
非递归:
#include<stdio.h>
#include<math.h>
int main()
{
int n,a=1,b=2,i,c;//a代表一次走一阶,b代表一次走两阶,i控制循环,c计算走的总阶数
while(scanf("%d",&n),n!=0)
{
if(n==1)
printf("1\n");//当n=1时,有一种走法
else if(n==2)
printf("2\n");//当n=2时,有两种走法
else//n>2
{
for(i=3; i<=n; i++)//第n阶只与n-1和n-2阶有关,防止n-2为负数
{
c=a+b;
a=b;
b=c;
}
printf("%d\n",c);
a=1,b=2;//重置a和b,防止对下一次循环造成影响
}
}
return 0;
}
ps:第二道题有点难了,搞了半天才差不多搞懂