#include <stdio.h> #define MAX n 1000000 int main() { int n,i; scanf("%d", &n); //输入 int method[n]; //定义数组method[i],记录恰好到达第i块砖的走法数 method[1] = 1; method[2] = 2; for(i=3; i<=n; i++) { method[i] = method[i-1] + method[i-2]; } int op; op = method[n] % 100007; printf("%d\n", op); //输出 return 0; }
时间: 2023-06-25 19:05:41 浏览: 64
这段代码是用于求解跳台阶问题的,采用动态规划的思想,时间复杂度为O(n)。其中,method[i]表示恰好到达第i块砖的走法数。
具体思路如下:
1. 当n=1时,只有1种跳法,即直接跳上去。
2. 当n=2时,有2种跳法,即先跳1步再跳1步,或者直接跳2步。
3. 当n>2时,每次跳可以选择跳1步或者跳2步,那么到达第i块砖的走法数就等于到达第i-1块砖的走法数加上到达第i-2块砖的走法数,即method[i] = method[i-1] + method[i-2]。
4. 最终输出method[n] % 100007,因为题目要求对100007取模。
需要注意的是,在定义数组method时,要保证数组大小足够大,以防止数组越界。
相关问题
程序分析#include <stdio.h>#include <string.h>#define MAX_LENGTH 100int main() { char str[MAX_LENGTH +
您提供的代码片段是一个简单的 C 语言程序,主要包含了用于输入和处理字符串的基本框架。这里做一下解释:
```c
#include <stdio.h> // 包含标准输入输出库,用于文件操作和基本函数如printf和scanf
#include <string.h> // 包含字符串处理函数,如strlen、strcpy等
#define MAX_LENGTH 100 // 宏定义了一个常量,表示字符串的最大长度为100个字符
int main() {
char str[MAX_LENGTH + 1]; // 定义一个字符数组str,用于存储用户输入的字符串,加1是因为字符串的结尾需要一个'\0'终止符
// 输入部分
printf("请输入一个字符串(不超过100字符):"); // 提示用户输入字符串
fgets(str, MAX_LENGTH + 1, stdin); // 使用fgets函数读取用户输入,包括换行符
// 剪切字符串中的换行符,如果有的话
str[strlen(str) - 1] = '\0'; // 如果最后一个字符是换行符,删除它
// 输出部分
printf("您输入的字符串是:%s\n", str); // 打印用户输入的字符串
return 0; // 主函数结束,通常返回0表示程序正常结束
}
求一批数中最大值和最小值的积 #include <stulib.h> #include <stdio.h> #define N 30
这是一个求一批数中最大值和最小值的积的代码模板,其中 #define N 30 定义了数组的长度为 30。下面是完整的代码:
```
#include <stdio.h>
#define N 30
int main() {
int a[N];
int n, i, max, min;
// 读入数据
printf("请输入数据个数:");
scanf("%d", &n);
printf("请输入 %d 个数:", n);
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
// 求最大值和最小值
max = min = a;
for (i = 1; i < n; i++) {
if (a[i] > max) {
max = a[i];
}
if (a[i] < min) {
min = a[i];
}
}
// 输出结果
printf("最大值为 %d,最小值为 %d,它们的积为 %d\n", max, min, max * min);
return 0;
}
```