CSP-J 2020 初赛试题解析(第一部分:阅读程序(二))

程序代码与详细解释:

#include<iostream> // 包含标准输入输出流库,用于输入输出操作  
using namespace std; // 使用标准命名空间,避免在调用标准库时重复写std::  
  
long long n, ans; // 定义两个长整型变量n和ans,n用于存储输入的次数,ans用于存储重置的次数  
int k, len; // 定义两个整型变量k和len,k用于存储重置的阈值,len用于存储数组d的当前长度  
long long d[1000000]; // 定义一个长整型数组d,大小为1000000,用于存储每个位置上的数字  
  
int main(){  
    cin >> n >> k; // 从标准输入读取两个整数n和k  
    d[0] = 0; // 初始化数组d的第一个元素为0  
    len = 1; // 初始化数组d的长度为1  
    ans = 0; // 初始化重置次数ans为0  
    for (long long i = 0; i < n; ++i) { // 使用for循环,从0迭代到n-1,共n次  
        ++d[0]; // 将数组d的第一个元素加1  
        for (int j = 0; j + 1 < len; ++j) { // 遍历数组d,除了最后一个元素外  
            if (d[j] == k) { // 如果当前元素等于k  
                d[j] = 0; // 将当前元素重置为0  
                d[j + 1] += 1; // 将下一个元素加1(如果下一个元素不存在,则会在后续处理中创建)  
                ++ans; // 重置次数ans加1  
            }  
        }  
        if (d[len - 1] == k) { // 检查最后一个元素是否等于k  
            d[len - 1] = 0; // 如果等于k,则重置为0  
            d[len] = 1; // 在数组d的末尾添加一个新元素,并初始化为1  
            ++len; // 数组d的长度加1  
            ++ans; // 重置次数ans加1  
        }  
    }  
    cout << ans << endl; // 输出重置次数ans  
    return 0; // 程序正常结束  
}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值