Find 3-friendly Integers

该篇文章讨论了一个编程问题,通过分析发现只需要预处理1到99的数字,判断它们对3的余数是否为0。代码展示了如何计算给定区间内满足`xmod3==0`条件的整数数量。

题目大意:
Def of 3-friendly:数字中只要子串mod 3==0即可,0也算
多组询问给定l ,r 问区间内有多少数满足条件

分析:
可以发现三位数都是可以的,那么4位数及以上也是可以的,可以看成三位数和另一个数拼起来,只要预处理1-99即可

#include<bits/stdc++.h>
using namespace std;
using i64 = long long;
using i128 = __int128;
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);

int pre[102];

bool check(int x){
    return x%3==0||(x>=10&&(x%10==0||x/10%3==0||x%10%3==0));
}

i64 l,r;
void solve(){
    cin>>l>>r;
    if(l>=100){
        cout<<r-l+1<<'\n';
    }else if(l<100&&r>=100){
        cout<<pre[99]-pre[l-1]+r-100+1;
    }else if(l<100&&r<100){
        cout<<pre[r]-pre[l-1]<<"\n";
    }
}

int main(){
    ios;
    for(int i = 1;i<=99;++i){
        pre[i] = pre[i-1]+check(i);
        //cout<<pre[i]<<" ";
    }
    cout<<"\n";
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

### MATLAB 中解决 `First argument must contain non-negative integers` 错误的方案 在 MATLAB 中,使用 `dec2hex` 函数将十进制数转换为十六进制字符串时,如果输入参数包含负数或非整数值,则会触发错误 `First argument must contain non-negative integers`。这是因为 `dec2hex` 函数仅接受非负整数作为输入[^1]。 #### 错误原因分析 该错误通常由以下几种情况引起: 1. 输入数据中包含负数。 2. 输入数据中包含非整数值(如浮点数)。 3. 输入数据类型不正确(例如,输入为字符串或其他非数值类型)。 #### 解决方案 以下是针对上述问题的解决方案: #### 1. 确保输入为非负整数 在调用 `dec2hex` 之前,需要确保输入数据为非负整数。可以通过以下方法实现: - 使用 `floor` 或 `round` 函数将浮点数转换为整数。 - 检查并过滤掉负数。 代码示例: ```matlab % 示例数据 data = [255, -1, 4096, 3.14]; % 过滤掉负数并将浮点数转换为整数 filteredData = floor(max(data, 0)); % 确保非负且为整数 % 转换为十六进制 hexValues = dec2hex(filteredData); disp(hexValues); ``` #### 2. 处理负数 如果需要处理负数,可以先将其转换为无符号整数形式,再进行转换。例如,对于 32 位整数,可以使用以下方法: ```matlab % 示例负数 negativeValue = int32(-1); % 转换为无符号整数 unsignedValue = typecast(negativeValue, &#39;uint32&#39;); % 转换为十六进制 hexValue = dec2hex(unsignedValue); disp([&#39;Negative Value: &#39;, num2str(negativeValue), &#39; -> Hex: &#39;, hexValue]); ``` #### 3. 批量转换数组 当需要对数组中的所有元素进行转换时,可以使用 `cellfun` 或循环来处理每个元素。以下是一个批量转换的示例: ```matlab % 示例数组 array = [255, 1024, -1, 3.14]; % 过滤和转换 filteredArray = floor(max(array, 0)); hexArray = arrayfun(@(x) dec2hex(x), filteredArray, &#39;UniformOutput&#39;, false); % 显示结果 disp(cellstr(hexArray)); ``` #### 4. 检查输入类型 确保输入数据为数值类型。如果输入为字符串或其他非数值类型,需先进行类型转换。例如: ```matlab % 示例字符串输入 strInput = "255"; % 转换为数值 numInput = str2double(strInput); % 检查是否为有效数值 if isnan(numInput) error(&#39;Invalid input: Not a number&#39;); end % 转换为十六进制 hexValue = dec2hex(numInput); disp([&#39;String Input: &#39;, strInput, &#39; -> Hex: &#39;, hexValue]); ``` ### 注意事项 - 在使用 `dec2hex` 时,务必确保输入数据满足函数要求,否则会导致运行时错误。 - 如果需要处理负数或浮点数,应根据具体需求选择适当的转换方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值