2499 不降的数字

2499 不降的数字

  1. 2 秒
  2. 262,144 KB
  3. 10 分
  4. 2 级题

小b有一个非负整数 N,她想请你找出 ≤N≤N 的最大整数x,满足x各个位数上的数字是不降的。也就是说,设x的十进制表示为 a1,a2,…,ama1,a2,…,am,则对于任意 1≤i<m1≤i<m,ai≤ai+1ai≤ai+1。

收起

输入

输入一个非负整数N。
0≤N≤10^9

输出

输出一个整数,表示答案

输入样例

332

输出样例

299
#include<bits/stdc++.h>
using namespace std;
int f(int n)
{
    int l=0;
    char a[10];
    while(n)
    {
        a[l++]=n%10;
        n/=10;
        if(l>=2)
        {
            if (a[l - 1] > a[l - 2])
                return 0;
        }
    }
    return 1;
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=n;i>0;i--)
    {
        if(f(i))
        {
            printf("%d\n",i);
            return 0;
        }
    }
}

 

使用前馈带饱和PI来控制d和q轴的电流得到dq的电压,使用Q格式(我这里指的Q12是2的12次方,范围0~4095),单位变换是将mΩ*ADC_MAX(ADC_MAX范围内为0~4095)—>变换成电压单位(V:变换成0~16384),给出函和详细的计算过程和单位换算过程(其中:Id和Iq(Q12格式)是通过ADC接口获取三相电流IA IB IC ,通过clark变换得到Ialph Ibeta,通过Park格式得到Id Iq,然后经过d和Q轴的两个PID或得Ud 和Uq, 实际使用的电机母线电压为24V,测量电压与ADC获取电压值的对应关系是 测量电压=((ADC获取电压值/4095 * 3.3V)-1.24v)*37;实际电流与ADC获取电流值的对应关系是:ADC获取电流值=((实际电流*20mΩ)*8+1.24V/3.3V *4095);实际电机的参 相电阻0.89Ω,相电感0.62mh 额定电流4A,额定转速3000rpm,编码器线1000线 极对4 反电动势常(线电压有效值)4.0V/Krpm;转动惯量0.028kg.cm2.),我已经有一些转换函 /*************************************** 功能:Clark变换 形参:三相电流以及alpha_beta电流 说明:由三相互差120度变换到两相互差90度 Iabc(Q12格式) Ibeta Ialph Q12格式 */ void Clarke_Transf_Q12(CURRENT_ABC_DEF_Q12 Current_abc_temp, CURRENT_ALPHA_BETA_DEF_Q12* Current_alpha_beta_temp) { // 中间计算使用32位防止溢出 int32_t temp_Ib_Ic = (int32_t)Current_abc_temp.Ib - Current_abc_temp.Ic; // Ialpha = Ia Current_alpha_beta_temp->Ialpha = Current_abc_temp.Ia; // Ibeta = (Ib - Ic) * (√3/3) Current_alpha_beta_temp->Ibeta = (int16_t)(temp_Ib_Ic * SQR3_OVER_3_Q12 >> Q12_SHIFT); } /*************************************** 功能:COS_SIN值计算 形参:角度以及COS_SIN结构体 说明:COS_SIN值计算 ***************************************/ void Angle_To_Cos_Sin(int16_t angle_temp,TRANSF_COS_SIN_DEF* cos_sin_temp) { //限制速度范围 int16_t anger = angle_temp%THETA_ANGER_Q12; cos_sin_temp->Sin = sin_table_q12[anger]; anger += THETA_ANGER_DIV4_Q12; anger = anger%THETA_ANGER_Q12; cos_sin_temp->Cos = sin_table_q12[anger]; } void Park_Transf_Q12(CURRENT_ALPHA_BETA_DEF_Q12 current_alpha_beta_temp,TRANSF_COS_SIN_DEF_Q12 cos_sin_temp,CURRENT_DQ_DEF_Q12* current_dq_temp) { // 所有中间计算使用32位防止溢出 int32_t temp1 = (int32_t)current_alpha_beta_temp.Ialpha * cos_sin_temp.Cos; int32_t temp2 = (int32_t)current_alpha_beta_temp.Ibeta * cos_sin_temp.Sin; int32_t temp3 = (int32_t)current_alpha_beta_temp.Ialpha * cos_sin_temp.Sin; int32_t temp4 = (int32_t)current_alpha_beta_temp.Ibeta * cos_sin_temp.Cos; // Id = Ialpha*Cos + Ibeta*Sin current_dq_temp->Id = (int16_t)((temp1 + temp2) >> Q12_SHIFT); // Iq = -Ialpha*Sin + Ibeta*Cos current_dq_temp->Iq = (int16_t)((-temp3 + temp4) >> Q12_SHIFT); } /** * @brief 将编码器计值转换为Q12格式角度 * @param enc_count 编码器累计计值(32位有符号整) * @return uint16_t Q12格式角度值(0~4095对应0~2π) */ uint16_t encoder_to_q12(int32_t enc_count) { const int32_t counts_per_rev = 4000; // 1000线编码器四倍频 int32_t mod = enc_count % counts_per_rev; // 处理负余 if (mod < 0) { mod += counts_per_rev; } // 计算: (mod*4096 + 2000)/4000 并四舍五入 uint32_t product = (uint32_t)mod * 4096 + 2000; return (uint16_t)(product / counts_per_rev); // 0~4095 }
最新发布
08-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值