top1编程
← 返回题目
题解

蜜蜂路线

1 条题解

  • 0
    @ 2026-7-29 1:15:55
    #include<bits/stdc++.h>
    using namespace std;
    int f[100][100];  // 第几项,当前结果的数字长度
    int len = 1;      // 当前高精度数字的位数
    int main()
    {
    	int m, n;
    	cin >> m >> n;
    	// 计算实际需要走的数量
    	int k = n - m;
    	// 特殊情况处理:如果k小于等于0
    	if(k <= 0){
    		cout << 0;
    		return 0;
    	}
    	// 特殊情况处理:如果只需要走1步
    	if(k == 1){
    		cout << 1;
    		return 0;
    	}
    	// 特殊情况处理:如果只需要走2步
    	if(k == 2){
    		cout << 2;
    		return 0;
    	}
    	// 初始化前两种情况的走法数
    	f[1][1] = 1;  // 第一步,长度为1
    	f[2][1] = 2;  // 第二步,长度为1
    	// 从第3级台阶开始计算到第k级台阶
    	for(int i = 3; i <= k; i++){
    		// 第一步:将前两项相加得到当前项
    		// f[i] = f[i-1] + f[i-2]
    		for(int j = 1; j <= len; j++){
    			f[i][j] = f[i-1][j] + f[i-2][j];
    		}
    		// 第二步:处理进位
    		for(int j = 1; j <= len; j++){
    			if(f[i][j] >= 10){
    				f[i][j+1] += f[i][j] / 10;  // 进位到下一位
    				f[i][j] %= 10;              // 保留个位
    			}
    		}
    		// 第三步:检查是否需要增加位数
    		// 如果最高位的下一位有值(进位产生的),则位数加1
    		if(f[i][len+1] > 0){
    			len++;
    		}
    	}
    	// 输出结果:从最高位到最低位依次输出
    	for(int i = len; i >= 1; i--){
    		cout << f[k][i];
    	}
    	return 0;
    }
    
    • 1