只有2个按键的键盘

初始时在记事本上只有一个字符 'A'。你可以在此记事本上每一步可以进行两种操作:

  1. Copy All: 你可以复制记事本上所有的字符(不允许部分复制)
  2. Paste: 你可以粘贴上一次复制的字符。

给出一个数字 n。你需要在记事本上得到恰好 n 个 'A', 请问最少需要几步。

样例

例1:

输入: 3
输出: 3
解释:
Intitally, we have one character 'A'.
In step 1, we use Copy All operation.
In step 2, we use Paste operation to get 'AA'.
In step 3, we use Paste operation to get 'AAA'.

例2:

输入: 1
输出: 0

注意事项

n 在范围 [1, 1000]

输入测试数据 (每行一个参数)如何理解测试数据?

 

class Solution {
public:
    /**
     * @param n: The number of 'A'
     * @return: the minimum number of steps to get n 'A'
     */
    int minSteps(int n) {
        // Write your code here
        return count(n);
    }
    
    int count(int n)
    {
        if(n == 0)
            return 0;
        else if(n == 2)
            return 2;
        else if(n == 3)
            return 3;
        if(n % 2 == 0)
        {
            return  count(n/2) + 2;   
        }
        if(isPrime(n))
            return n;
        int big = yinzi(n);
        int times = n / big;
        return count(big) + 1 + times - 1;
        
    }
    int yinzi(int num)
    {
        for(int i = num - 1; i >= 2; i--)
        {
            if(num % i == 0)
                return i;
        }
        return -1;
    }
    
    bool isPrime(int number) {
        for (int i = 2; i * i <= number; i++)
            if (number % i == 0)
                return false;
        return true;
    }
};

 

在4*4矩阵键盘的设计中,当多个按键按下,通常会遇到按键冲突(debouncing)问题。这是因为在短间内连续按键动作会被视为多次按下的信号,而不是单独一次。解决这个问题的基本思路是增加延判断和状态跟踪。 以下是简单的伪代码示例(假设使用C语言风格): ```c // 定义一个数组存储按键的状态 bool key_states[16]; // 定义一个器变量和阈值 unsigned long debounce_time = DEBOUNCE_TIME; // 某一固定间间隔 unsigned long last_press_time; void matrixScan() { for (int i = 0; i < 16; i++) { if (digitalRead(matrixPin[i]) == LOW && !key_states[i]) { // 新键按下 last_press_time = millis(); // 更新上次按下间 key_states[i] = true; } else if (digitalRead(matrixPin[i]) == HIGH && key_states[i]) { // 键释放 if (millis() - last_press_time > debounce_time) { // 如果超过阈值,认为是有效按下 processKeyPress(i); // 处理按键事件 key_states[i] = false; } } } } void processKeyPress(int keyIndex) { // 根据keyIndex获取对应的按键并处理逻辑 // ... } ``` 在这个代码中,每当检测到一个按键按下,会记录下当前的间。只有当按键保持按下状态的间超过了预设的延(`debounce_time`),程序才会认为这是一个独立的按键事件,并触发相应的处理函数。 请注意,这只是一个基础示例,实际应用中可能还需要根据特定硬件平台和编程环境调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值