XTU-OJ 1331-密码

博客围绕Eric设置特定规则密码的问题展开,规则为使用数字1、2、3、4,相邻数字不同且相差不超2。通过递推方法,从长度n为1、2的情况逐步推导,先规定第n位数字,找符合条件的第n - 1位数匹配,最终求解长度为n时密码的种类数。

题目描述

Eric喜欢使用数字1,2,3,4作为密码,而且他有个怪癖,相邻数字不能相同,且相差不能超过2。当然只用数字做密码,会比较弱,Eric想知道当长度为n时,这样的密码有多少种?

输入

第一行是一个整数T(1≤T≤45),表示样例的个数。 每行一个样例,为整数n(1≤T≤45)。

输出

每行输出一个样例的结果。

样例输入

5
1
2
3
4
5

样例输出

4
10
26
66
170

解题思路:这题就用递推的方法来解。 何为递推?顾名思义,就是一步一步的推理~~,答案是推出来的。 然后从  相邻数字不能相同,且相差不能超过2  这个条件入手。

当长度n==1时,密码有几种情况? 秒答:1、2、3、4 四种情况,

那长度n==2时,有几种情况?这时就已经要开始递推了。当第一位数字是1,第二位数字可为 2、3,当第一位数字是2,第二位数字可为 1、3、4,当第一位数字是3,第二位数字可为 1、2、4,当第一位数字是4,第二位数字可为 2、3。   这是一共就是 2+3+3+2种情况。

此时如果你能具有一定的敏感性,懂得逆向思考一下,这题已经解决了。如果我先规定第2位的数字,然后再考虑前面的情况。规定是1,那第一位只能是2、3,规定是2,那第一位只能是1、3、4........

推广:先规定第n位的数字,然后找到符合条件的第n-1位数和它匹配。 那就是 第n位是1的种类数等于,第n-1位是2的种类数+第n-1位是3的种类数;第n位是2的种类数等于,第n-1位是1的种类数+第n-1位是3的种类数+第n-1位是4的种类数........

现在你是否能得出答案。(注意这种情况数字都很大,往往要考虑是否会爆int)

AC代码:

#include <stdio.h>

int T,N;
__int64 ak47[50][5];
__int64 ans;

void slove()
{
    ak47[1][1] = ak47[1][2] = ak47[1][3] = ak47[1][4] = 1;
    for (int i = 2; i <= 45; i ++)
    {
        ak47[i][1] = ak47[i-1][2]+ak47[i-1][3];
        ak47[i][2] = ak47[i-1][1]+ak47[i-1][3]+ak47[i-1][4];
        ak47[i][3] = ak47[i-1][1]+ak47[i-1][2]+ak47[i-1][4];
        ak47[i][4] = ak47[i-1][2]+ak47[i-1][3];
    }
}

int main()
{
    slove();                // 递推
    scanf("%d",&T);
    while ( T --)
    {
        scanf("%d",&N);
        ans = ak47[N][1]+ak47[N][2]+ak47[N][3]+ak47[N][4];
        printf("%I64d\n",ans);
    }
    return 0;
}

<think> 由于我无法直接访问外部网络资源,包括XTU-OJ平台,因此无法直接获取1056题的具体内容。但根据常见OJ平台的题目编号规律和用户需求,我可以推测这是一道算法题目,并给出一般性的解题思路和帮助。 用户要求查找XTU-OJ 1056题目的相关信息。由于我没有该题的具体描述,以下将基于常见OJ题目类型(如该编号在XTU-OJ中可能是数组操作、数学问题等)提供可能的解题方向。 ### 常见OJ题目类型分析 在OJ平台中,编号1056的题目可能涉及以下类型: 1. **数组/字符串处理**:如查找、排序、统计等。 2. **数学问题**:如数论、组合数学、几何等。 3. **动态规划**:如背包问题、路径问题等。 4. **数据结构**:如链表、树、图的遍历等。 ### 通用解题建议 由于没有具体题目,以下提供通用解题步骤: 1. **仔细阅读题目**:明确输入输出格式、数据范围。 2. **设计算法**:根据题目描述选择合适的算法(如排序、搜索、动态规划等)。 3. **代码实现**:使用合适的数据结构(如数组、哈希表等)实现算法4. **边界测试**:考虑特殊输入(如空值、极限值)进行测试。 ### 代码示例 假设XTU-OJ 1056是一道经典的“两数之和”问题(仅为示例,实际题目可能不同): **题目描述**:给定整数数组`nums`和目标值`target`,在数组中找出和为目标值的两个整数,并返回它们的下标。假设每个输入只对应一个答案。 ```python def two_sum(nums, target): hash_map = {} for i, num in enumerate(nums): complement = target - num if complement in hash_map: return [hash_map[complement], i] hash_map[num] = i return [] ``` §§相关问题§§ 1. XTU-OJ平台如何提交代码? 2. 如何处理数组中的重复元素? 3. 如何优化时间复杂度? </think> 我无法直接访问XTU-OJ平台获取具体题目内容,但根据OJ平台的常见题目类型和编号规律,XTU-OJ 1056题很可能是**数组操作或数学计算类**的题目。以下是基于常见OJ题型整理的参考信息: ### 典型题目特征(推测) 1. **输入格式**:多组测试数据,每组包含若干整数 $n$ 和数组元素 $a_1, a_2, \dots, a_n$ 2. **考察内容**可能涉及: - 数组元素统计(如奇偶数分类、质数判断) - 特殊计算(最大公约数/最小公倍数) - 排序或查找算法 3. **输出要求**:每组数据输出一行结果(常见于XTU-OJ题型) ### 参考解题框架 ```c #include <stdio.h> int main() { int T; // 测试数据组数 scanf("%d", &T); while (T--) { int n; scanf("%d", &n); int arr[100]; for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } // 解题逻辑区域(示例:计算奇数元素和) int sum_odd = 0; for (int i = 0; i < n; i++) { if (arr[i] % 2 != 0) { sum_odd += arr[i]; } } printf("%d\n", sum_odd); } return 0; } ``` ### 建议获取准确题目的方法 1. **直接访问XTU-OJ**: ```url http://202.197.224.59/exam/index.php/exam/problems/exam_id/2136?type=2&id=1056 ``` (链接需在湘潭大学网络环境访问) 2. **查看题目关键特征**: - 输入/输出样例(通常含2-3组测试数据) - 数据范围约束(如 $1 \leq n \leq 100$) - 时间限制(通常C语言1000ms)
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值