HDOJ 1005 Number Sequence 打表 找规律 周期

🍑 OJ专栏


🍑 HDOJ Number Sequence

在这里插入图片描述
输入

1 1 3
1 2 10
0 0 0

输出

2
5

🤠 题意简单,数据范围大,找规律推公式

🍑 打表代码(找规律)

import java.util.Scanner;

public class Main
{
	static int[] w = new int[10000];

	public static void main(String[] args)
	{
	 	// a b 自定,一般测几组极端边界值和随机数据
		int a = 11;
		int b = 2;
		w[1] = 1;
		w[2] = 1;
		for (int i = 2; i < 10000; i++)
			w[i] = (a*w[i - 1] + b*w[i - 2]) % 7;

		for (int i = 1; i <= 1000; )
		{
//			System.out.println(i + ":" + w[i] + " ");//全局打表找规律

            //输出一个周期的所有数
			for (int cnt = 1; cnt <= 48; cnt++)
				System.out.print(w[i++] + ",");
				
			System.out.println();
		}
	}
}

输出

在这里插入图片描述

🍑 从表可得,一个周期有 48 个数,每一组 a b 的数字序列都是 48 个数反复循环
⭐ 首先预处理1 ~ 48 之间的数,然后直接取值

🍑AC代码

import java.util.Scanner;

public class Main
{
	static int N = 50;
	static int[] w = new int[N];

	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext())
		{
			int a = sc.nextInt();
			int b = sc.nextInt();
			int n = sc.nextInt();
			if (a == 0 && b == 0 && n == 0)
				break;
			w[1] = 1;
			w[2] = 1;
			for (int i = 3; i <= 47; i++)
				w[i] = (a * w[i - 1] + b * w[i - 2]) % 7;
			w[0] = w[48];//48 % 48 == 0; 第 48 个数映射到 0 下标处
			System.out.println(w[n % 48]);
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值