编译与运行时无错误,提交到系统时出现 Time Limit Exceed。
题目描述
数列生成规则如下:
比如a=2,b=3,那么数列为2,3,6,1,8,8,...。 请写一个程序,输出数列的第n个元素的值。
输入
第一行是一个整数n,表示样例的个数。 每个样例的第一行是三个整数a,b,Q(1 ≤ Q ≤ 1,000),其中Q表示查询的次数。 以后的Q行,每行一个整数y
,(1 ≤ n ≤ 1,000,000,000)。
输出
每个样例的每个查询输出一行,即对应元素的值。
样例输入
3 2 3 4 1 2 3 4 3 3 4 1 2 3 4 9 9 1 100000000
样例输出
2 3 6 1 3 3 9 2 2
#include<stdio.h>
int main()
{
int i,j;
int k,l,m;
int a,b,q;
int n,y[1000];//n样例数。
scanf("%d",&n);
for ( i=0;i<n;i++ )
{
scanf("%d %d %d",&a,&b,&q);
for ( j=0;j<q;j++ )
{
scanf("%d",&y[j]);
}
j=2,l=0;
if( y[l]==1 ) { printf("%d\n",a); l++; }
if( y[l]==2 ) { printf("%d\n",b); l++; }
while ( l<q )
{
k=a*b;
if ( k>=10 )
{
a=m=k/10;
j++;
if ( j==y[l] )
{
printf("%d\n",m); l++;
}
b=m=k%10;
}
else
{
a=b; b=m=k;
}
j++;
if ( j==y[l] )
{
printf("%d\n",m); l++;
}
}
}
return 0;
}
编译与运行时无错误,提交到系统时出现 Time Limit Exceed。不知道怎么改了。希望能够得到更好的算法,能优化也行。谢谢。
双for 原因导致超时。建议申请空间去存储状态。
以后的Q行,每行一个整数y ,(1 ≤ n ≤ 1,000,000,000)。
可以预见的。你每次输一个需要查询的数。你就必须重新算一次。实际只需要算一遍。然后去下标里找就可以了。
你这里,我每次要来查询,我都要算一遍。我把这些个数组的值,直接存到数组里。我直接拿下标去取 不就好了吗
我第一次来查的时候,查下标39...数列0-39已经算过了。
我第二次查1000,又从0-1000算一遍。
我第三次查100000 又从0-100000算一遍。
你发现问题没有。。
那是不是我存一个数组阿,第一次算到39.然后第二次要算1000的时候,我直接从39开始取就好了呀。
第三次,如果我要查999的数据,我直接从数组里拿。O(1)的速度。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632