2019蓝桥杯省赛c语言b组 试题 C: 数列求值

本题是一道编程题,要求计算特定数列第20190324项的最后4位数字。该数列从第4项起,每项为前3项之和。通过迭代计算并取模,最终得出答案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

试题 C: 数列求值

本题总分:10 分

【问题描述】

给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求 第 20190324 项的最后 4 位数字。

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个 4 位整数(提示:答案的千位不为 0),在提交答案时只填写这个整数,填写 多余的内容将无法得分。

#include <stdio.h>
#include <stdlib.h>
//前三项和      1,1,1,3
//ans = 4659
int main()
{
    int a=1,b=1,c=1,d=3;
    for(int i=4;i<=20190324;i++){
        d=a+b+c;
        d%=10000;
        a=b,b=c,c=d;
    }
    printf("%d",d);
    return 0;
}

### 蓝桥杯 B C语言 题目 解题思路 蓝桥杯作为一面向全国大学生的编程竞,其题目涵盖了基础算法、数据结构以及实际应用等多个方面。以下是针对蓝桥杯BC语言的一些典型题目及其解题思路: #### 1. **斐波那契数列** ##### 题目描述 计算第N斐波那契数。 ##### 解题思路 可以通过递推或者矩阵快速幂实现高效解。对于较大的N值,推荐使用矩阵快速幂方法以降低时间复杂度至 \(O(\log N)\)[^1]。 ```c #include <stdio.h> // 使用矩阵快速幂的方法 void multiply(int F[2][2], int M[2][2]) { int a = F[0][0]*M[0][0] + F[0][1]*M[1][0]; int b = F[0][0]*M[0][1] + F[0][1]*M[1][1]; int c = F[1][0]*M[0][0] + F[1][1]*M[1][0]; int d = F[1][0]*M[0][1] + F[1][1]*M[1][1]; F[0][0] = a; F[0][1] = b; F[1][0] = c; F[1][1] = d; } int fibonacci(int n) { int F[2][2] = {{1,1},{1,0}}; if (n == 0) return 0; power(F, n-1); return F[0][0]; } ``` --- #### 2. **闰年判断** ##### 题目描述 给定一个年份,判断该年是否为闰年。 ##### 解题思路 根据公历规定,能被4整除但不能被100整除,或者能被400整除的年份为闰年[^1]。 ```c #include <stdio.h> int isLeapYear(int year){ if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){ return 1; // 是闰年 } return 0; // 不是闰年 } ``` --- #### 3. **杨辉三角形** ##### 题目描述 打印指定层数的杨辉三角形。 ##### 解题思路 利用二维数存储每一层的结果,并通过动态规划的方式逐层填充数值[^1]。 ```c #include<stdio.h> #define MAX_ROW 15 int main(){ int row,i,j,a[MAX_ROW][MAX_ROW]={0}; scanf("%d",&row); // 输入行数 for(i=0;i<row;i++){ a[i][0]=a[i][i]=1; // 边界初始化 printf("%d ",a[i][0]); for(j=1;j<i;j++) { a[i][j]=a[i-1][j]+a[i-1][j-1]; // 动态转移方程 printf("%d ",a[i][j]); } printf("\n"); } return 0; } ``` --- #### 4. **字符串处理:单词变复数** ##### 题目描述 将英文单数形式转换为其对应的复数形式。 ##### 解题思路 根据不同词尾规则(如s/x/ch/sh结尾加es,辅音+y结尾变为ies),分类讨论并完成转化[^1]。 ```c #include <stdio.h> #include <string.h> char* pluralize(char str[]) { char *result = malloc(strlen(str)+5); strcpy(result,str); if(strcmp(&str[strlen(str)-2],"ss")==0 || strcmp(&str[strlen(str)-1],"x")==0 || strcmp(&str[strlen(str)-1],"h")==0 ){ strcat(result,"es"); }else{ strcat(result,"s"); } return result; } ``` --- #### 5. **大整数加法** ##### 题目描述 两个超大数据相加,返回结果。 ##### 解题思路 采用逆向模拟手工竖式加法规则,按位累加并记录进位情况[^1]。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> char* addStrings(const char* num1, const char* num2){ int i=strlen(num1)-1,j=strlen(num2)-1,k=0,sum,carray=0; char* res=(char*)malloc(sizeof(char)*(fmax(i,j)+3)); while(i>=0||j>=0||carray>0){ sum=carray+(i>=0?num1[i--]-&#39;0&#39;:0)+(j>=0?num2[j--]-&#39;0&#39;:0); res[k++]=sum%10+&#39;0&#39;; carray=sum/10; } res[k]=&#39;\0&#39;; reverse(res,strlen(res)); // 结果反转 return res; } ``` --- #### 总结 以上仅列举了几种常见的蓝桥杯BC语言题目类型及对应解决方案。值得注意的是,在准备过程中应注重积累常用算法模板与技巧,同时加强实战演练提升编码速度与准确性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值