当前位置: 代码迷 >> C语言 >> [讨论]第一期题目
  详细解决方案

[讨论]第一期题目

热度:58   发布时间:2006-11-12 14:30:32.0

楼上的一定超时,改进下.


----------------解决方案--------------------------------------------------------
我直接就这样用公式写了,没注意到值的限制。是不该这么简单的哦。
----------------解决方案--------------------------------------------------------

用数组递推,应该不会超时.


----------------解决方案--------------------------------------------------------
呵呵,这道题要找规律的.应该没有表面一看就知道怎么做的.
要不然给出递归式,直接用递归,那谁都会的.
----------------解决方案--------------------------------------------------------
大家细心点,这些题目都不会太直接.反正有一个星期的时间,慢慢来.
做的多自然会顺手.大家觉得自己的代码在本地测试通过了的话,并且效率可以,就贴上来,我会帮大家测试一下.
不过现在我得下了,大概晚上会上来看看.
大家加油啊
----------------解决方案--------------------------------------------------------

#include<stdio.h>

int main()
{
int f1=1,f2=1,f=0;
int A=0,B=0,n=1,i=0;
for(;;)
{
scanf("%d%d%d",&A,&B,&n);
A=A%7;B=B%7;
if((A==0)&&(B==0)&&(n==0))break;
else if(n==1||n==2) f=f1;
else
for(i=3;i<=n;i++)
{
f=(A*f2+B*f1)%7;
f1=f2;f2=f;
}
printf("%d\n",f);
}
return 0;
}
如何?


----------------解决方案--------------------------------------------------------
今天怎么没什么人?
题目还不错呀,双休日不做题?
先下了,望帮忙看下上面的程序
----------------解决方案--------------------------------------------------------
#include<stdio.h>
int T[7][7];
int num[7][7][100];
void T_num()
{
int a,b,index,f1,f2,f,count;
for(a=0;a<7;a++)
for(b=0;b<7;b++)
{
f1=1;
f2=1;
index=0;
count=0;
if(a==0 || b==0)
{
while(1)
{
f=(a*f2+b*f1)%7;
if(index>0 && f==num[a][b][0])
break;
num[a][b][index++]=f;
f1=f2;
f2=f;
count++;
}
T[a][b]=count;
}
else
{
while(1)
{
f=(a*f2+b*f1)%7;
if(index>2 && f2==num[a][b][0] && f==num[a][b][1])
break;
num[a][b][index++]=f;
f1=f2;
f2=f;
count++;
}
T[a][b]=count-1;
}
}
}
int main()
{
int a,b;
long n;
T_num();
while(EOF!=scanf("%d%d%ld",&a,&b,&n))
{
if(a==0 && b==0 && n==0)
break;
if(n==1 || n==2)
{
printf("1\n");
continue;
}
a%=7;
b%=7;
printf("%d\n",num[a][b][(n-3)%T[a][b]]);
}
return 0;
}

----------------解决方案--------------------------------------------------------
以下是引用guzhou在2006-11-12 15:02:14的发言:

#include<stdio.h>

int main()
{
int f1=1,f2=1,f=0;
int A=0,B=0,n=1,i=0;
for(;;)
{
scanf("%d%d%d",&A,&B,&n);
A=A%7;B=B%7;
if((A==0)&&(B==0)&&(n==0))break;
else if(n==1||n==2) f=f1;
else
for(i=3;i<=n;i++)
{
f=(A*f2+B*f1)%7;
f1=f2;f2=f;
}
printf("%d\n",f);
}
return 0;
}
如何?

这个肯定超时,n最大可以到1亿
还有int n;改为long n;
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<math.h>
#define M 1000
int main()
{
int x,y,n,t,sq,i;
int X[M],Y[M];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d%d",&X[i],&Y[i]);
for(i=0;i<n;i++)
{
x=X[i];
y=Y[i];
t=y-x;
if(t==0)
printf("0\n");
else
{
sq=(int)sqrt(t);
if(sq*sq==t)
printf("%d\n",2*sq-1);
else if(t>(sq+1)*(sq+1)-(sq+1))
printf("%d\n",2*(sq+1)-1);
else
printf("%d\n",2*(sq+1)-2);
}
}
return 0;
}

----------------解决方案--------------------------------------------------------

  相关解决方案