HDOJ 1005

简介: 1 #include 2 int main() 3 { 4 int f[200],a,b,n,i; 5 while(scanf("%d%d%d",&a,&b,&n),a||b||n) 6 { 7 if(n>2) 8 ...
 1 #include<stdio.h>
 2 int main()
 3 {
 4     int f[200],a,b,n,i;
 5     while(scanf("%d%d%d",&a,&b,&n),a||b||n)
 6     {
 7         if(n>2)
 8         {
 9             f[1]=f[2]=1;
10             for(i=3;i<200;i++)
11             {
12                 f[i]=(a*f[i-1]+b*f[i-2])%7;
13                 if(f[i-1]==1&&f[i]==1)
14                     break;
15             }
16             i-=2;//LPP,最小正周期
17             n=n%i;//比如1~5是个循环周期,f(6)=f(1)、
18             if(n==0)
19                 printf("%d\n",f[i]);
20             else
21                 printf("%d\n",f[n]);
22         }
23         else
24             printf("1\n");
25     }
26     return 0;
27 }

//有个错觉,既然n是一亿,又怎么能用整形输入呢,必须需字符串,实际上是错误的,2^31-1达到

 

了21亿

//和递归相比主要是求出了LPP,减少了不必要的运算次数

 

 

 

 

 

 

 

//栈耗尽,因为n可以到一亿

#include<stdio.h>

int Calc_n(int A,int B,int n)

{

int m,p;

if(1==n||2==n)

return 1;

else

{

m=A*Calc_n(A,B,n-1);

p=B*Calc_n(A,B,n-2);

return (m%7+p%7)%7;

}

 

}

int main()

{

int A,B,n;int ans;

while(scanf("%d%d%d",&A,&B,&n),A||B||n)

ans=Calc_n(A,B,n);

printf("%d\n",ans);

return 0;

}

 

 

 

 

 

(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.

 

很明显这是一道找规律的题目。

 

用到模数的一个性质 (a*b)%m=(a%m * b%m)%m, (a+b)%m=(a%m+b%m)%m

 

由此 f(n)=(A%7*f(n-1)+B%7*f(n-2))%7

 

虽然1 <= A, B <= 1000,但是A%7与B%7的值的范围只有0~6,也就是说共有49种情况,代入个数手工

 

推算一下,可以发现

 

f(n)会出现循环(这个是必然的)

 

 

}

 
目录
相关文章
HDOJ 2040 亲和数
HDOJ 2040 亲和数
120 0
HDOJ 2057 A + B Again
HDOJ 2057 A + B Again
104 0
HDOJ的题目分类
模拟题, 枚举 1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 1049 1050 1057 1062 1063 1064 1070 1073 ...
1822 0
|
人工智能 算法
HDOJ 3466 Proud Merchants
Problem Description Recently, iSea went to an ancient country. For such a long time, it was the most wealthy and powerful kingdom in the world.
951 0
|
测试技术
HDOJ 2033 人见人爱A+B
Problem Description HDOJ上面已经有10来道A+B的题目了,相信这些题目曾经是大家的最爱,希望今天的这个A+B能给大家带来好运,也希望这个题目能唤起大家对ACM曾经的热爱。
957 0
|
安全
HDOJ 2022 海选女主角
Problem Description potato老师虽然很喜欢教书,但是迫于生活压力,不得不想办法在业余时间挣点外快以养家糊口。 “做什么比较挣钱呢?筛沙子没力气,看大门又不够帅…”potato老师很是无奈。
1173 0
|
Java
HDOJ 1201
18岁生日 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 10076 Accepted Submission(s): 3201 Problem Description Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。
838 0
|
Java 机器学习/深度学习
HDOJ 2151
Worm Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1727 Accepted Submission(s): 1082 Problem Description 自从见识了平安夜苹果的涨价后,Lele就在他家门口水平种了一排苹果树,共有N棵。
659 0