HDU1005 一直都是Time Limit Exceeded 哇哈哈

来源:互联网 发布:c语言图形程序设计 编辑:程序博客网 时间:2024/05/17 07:56

一开始的程序是这样的

import java.util.Scanner;public class Hdu1005{    public static void main(String[]args){        int x,y,a,b,n;        x=1;        y=1;        Boolean flag=true;        Scanner scan=new Scanner(System.in);        while(true){            a=scan.nextInt();            b=scan.nextInt();            n=scan.nextInt();            if(a==0&&b==0&&n==0)break;            if(n==1||n==2){                System.out.println("1");                continue;            }            else{                for(int i=0;i<n-2;i++){                    if(flag){                        x=(a*x+b*y)%7;                        flag=false;                        continue;                    }                    else{                        y=(a*y+b*x)%7;                        flag=true;                        continue;                    }                }            }            if(flag){                System.out.println(y);            }            else{                System.out.println(x);            }        }    }}

提交之后,反馈是Time Limit Exceeded。
What!!!!
本来人家今天开开心心的,为什么这样对我,蓝受,香菇。
没办法只能减肥了。
经过努力,登登登登,瘦身成功。哇哈哈。

import java.util.Scanner;public class Main{    public static void main(String[]args){        int x,y,a,b,n,t;        x=1;        y=1;        Scanner scan=new Scanner(System.in);        while(true){            a=scan.nextInt();            b=scan.nextInt();            n=scan.nextInt();            if(a==0&&b==0&&n==0)break;            if(n==1||n==2){                System.out.println("1");                continue;            }            else{                for(int i=0;i<n-2;i++){                    t=y;                    y=(a*x+b*y)%7;                    x=t;                }            }            System.out.println(y);        }           }}

心情再一次美丽起来!!!!结果
Time Limit Exceeded.
听 听 听见了吗?
心碎的声音。
不行了,我要去抱大神腿了,查了查。问题出在对于7的余数只能是{0,1,2,3,4,5,6}这7种,对于f[n-1]和f[n]的组合就是7*7=49种。
思路就是做出来f[49]表,f[n]=f[n%49]。
对于这种题,我只想说,小碧池。哼!

import java.util.Scanner;public class Main{    public static void main(String[]args){        int a,b,n;        Scanner scan=new Scanner(System.in);        while(true){            a=scan.nextInt();            b=scan.nextInt();            n=scan.nextInt();            if(a==0&&b==0&&n==0)break;            int f[]=new int[50];            f[1]=1;            f[2]=1;            for(int i=3;i<50;i++){                f[i]=(a*f[i-1]+b*f[i-2])%7;            }            System.out.println(f[n%49]);        }           }}
原创粉丝点击