| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1751 人关注过本帖
标题:个数超过数组范围怎么办,请大牛说说常用方法
只看楼主 加入收藏
编程探索者
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2010-7-21
收藏
得分:0 
各位大侠帮忙看看下面哪错了
#include <stdio.h>
int main()
{
    long n,i,k,r,r0;
    int f[200],A,B;
    f[1]=1;f[2]=1;
    while(scanf("%d%d%ld",&A,&B,&n)!=EOF)
    {
        if(A==0&&B==0&&n==0)
            break;
        if(n==1||n==2)
            r=f[n]%7;
        else
        {
           k=0;
           i=3;
           f[i]=(A%7*f[i-1]+B%7*f[i-2])%7;
           r0=f[i];
           r=r0;
           for(i=4;i<=n;i++)
           {
               f[i]=(A%7*f[i-1]+B%7*f[i-2])%7;
               r=f[i];
               k++;
           if(r==r0&&i!=n)
               {
        n=n-k+1;
                i=i-k+1;
               }
               k=0;
               if(i==n)
               break;
           }
       }

            printf("%ld\n",r);
    }
    return 0;
}
2010-07-22 14:49
LSYHEFENG
Rank: 2
等 级:论坛游民
帖 子:112
专家分:71
注 册:2010-7-17
收藏
得分:0 
你是想利用余数的重复性减少数组的开辟位数吧,真聪明
2010-07-22 14:56
LSYHEFENG
Rank: 2
等 级:论坛游民
帖 子:112
专家分:71
注 册:2010-7-17
收藏
得分:0 
恩,我是这样想的,可是不知哪出错了
2010-07-22 15:06
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:5 
回复 23楼 LSYHEFENG
那么我就帮LZ改改吧

[ 本帖最后由 sunyh1999 于 2010-7-22 18:31 编辑 ]

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-22 18:27
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
程序代码:
#include <stdio.h>
void main()
{
    long n,i,k,r,r0;
    int f[200],A,B;
    f[1]=1;f[2]=1;
    while(scanf("%ld%ld%ld",&A,&B,&n)!=EOF)
    {
        if(A==0&&B==0&&n==0){printf ("A B n not equal to 0!\n");break;}
        if(n==1||n==2)r=f[n]%7;
        else
        {  k=0;
           i=3;
           f[i]=(A%7*f[i-1]+B%7*f[i-2])%7;
           r0=f[i];
           r=r0;
           for(i=4;i<=n;i++)
           {
               f[i]=(A%7*f[i-1]+B%7*f[i-2])%7;
               r=f[i];
               k++;
           if(r==r0&&i!=n)
               {
        n=n-k+1;
                i=i-k+1;
               }
               k=0;
               if(i==n)
               break;
           }
       }

            printf("%ld\n",r);
    }
   
} 
这个行吗?

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-22 18:30
LSYHEFENG
Rank: 2
等 级:论坛游民
帖 子:112
专家分:71
注 册:2010-7-17
收藏
得分:2 
我也觉得代码不行,但相关思想我认同,大侠们就帮他改改吧,只要还剩些是原来的就行了吗,思想别改就行了,呵呵
2010-07-22 19:54
flyingcat
Rank: 4
来 自:HDU
等 级:业余侠客
威 望:2
帖 子:55
专家分:230
注 册:2010-7-18
收藏
得分:7 
//呃,又是HDOJ上的题,当时的AC代码:
//楼主注意一下,OJ中一般给你开的内存大小就32M,你如果要申请1E个内存的话,交上去肯定会MLE的,所以要具体看题目
//这题是有规律可以找的,你可以一开始打一个表,如果发现连续两个数是1的话,就说明这就是一轮循环了,所以关键是找到这两个1出现在什么地方
//打一个表,找到两个1的位置,然后将数据先打好表,最后对输入的数据相应地去除那个循环取余就可以得到答案了
//楼主你的想法是没错的,但是对余这些大数据的题目来说,开这么大内存,和处理这么多数据,会MLE和TLE
程序代码:
#include <stdio.h>
int main()
{
    int num[51],a,b,i;
    long n;
    num[1]=1;num[2]=1;
    while(1)
    {
        scanf("%d%d%ld",&a,&b,&n);
        if(!a && !b && !n)
            break;
        for(i=3;i<51;i++)
        {
            num[i]=(a*num[i-1]+b*num[i-2])%7;
            if(num[i]==1 && num[i-1]==1)
            {
                i-=2;
                break;
            }
        }
        num[0]=num[i];
        printf("%d\n",num[n%i]);
    }
    return 0;
}
2010-07-24 18:19
快速回复:个数超过数组范围怎么办,请大牛说说常用方法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014178 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved