招商银行笔试题:求数字N中有多少个数字M?

已知M∈[1, 9],已知数字N,求N中有多少个M?

例:
N=15
M=4
则N中有2个M

N=33
M=2
则N中有13个M


输入:
M  N

输入
有多少个数字?




太难了,盯了一个小时屏幕,已凉
#笔试题目##招商银行#
全部评论
转字符串
点赞
送花
回复
分享
发布于 2021-04-01 20:48
#include<iostream> #include<vector> using namespace std; int main() {     int m, n;     cin >> m >> n;     int n1 = n / 10, k = 10, idx;     vector<int> count = { 0,1 }, nums = { n % 10 };     while (n1 > 0) {         count.push_back(count.back() * 9 + k);         nums.push_back(n1 % 10);         k *= 10;         n1 /= 10;     }     //for(int i:count) cout<<i<<' &(5528)#39;;     //cout<<endl;     //for(int i:nums) cout<<i<<' &(5528)#39;;     //cout<<endl;     int ans = 0;     for (int i = nums.size() - 1; i > -1; --i) {         k /= 10;         //cout<<k<<endl;         if (nums[i] <= m) {             ans += count[i] * nums[i];             if (nums[i] == m) {                 ans += n % k;                 break;             }         }         else {             ans += count[i] * (nums[i] - 1) + k;         }     }     cout << ans << endl;     return 0; }
点赞
送花
回复
分享
发布于 2021-04-01 21:28
做出来了:https://blog.nowcoder.net/n/f5703527172e480fa830275e521e356f
点赞
送花
回复
分享
发布于 2021-04-02 17:09
感觉可以找规律吧,比如说000到999的话0到9的概率一样都是1/10,那么1出现的次数就是3*1000*1/10=300,可以先算一下N的位数,如果N是3位数,那么就在300的基础上操作,除了M开头的那100个数,剩下的是等概率的,可以先减去这部分,然后看一下N的首位占了几份,算出这部分后再判断和M的大小,决定加不加那100个,代码: static int NContainsM(int N,int M){         int length = LengthOfDigits(N);         int FirstNum = N/(int)(Math.pow(10,length-1));         int res = length*((int)Math.pow(10,length))/10;         res-=Math.pow(10,length-1);         if(FirstNum<M){             res=res*(FirstNum+1)/9;         }else if(FirstNum==M){             res=res*(FirstNum+1)/9;             res+=(N-M*Math.pow(10,length-1));         }else{             res=res*(FirstNum)/9;             res+=Math.pow(10,length-1);         }         return res;     }     static int LengthOfDigits(int N){         int res = 0;         while(N>0){             N/=10;             res++;         }         return res;     }
点赞
送花
回复
分享
发布于 2021-05-17 22:42
```cpp int countNumX2(int n, int x) { int high = n / 10; int cur = n % 10; int low = 0; int digit = 1; int res = 0; while (high != 0 || cur != 0) { if (cur < x) { res += high * digit; } else if (cur == x) { res += high * digit + low + 1; } else if (cur > x) { res += (high + 1) * digit; } low = cur * digit; cur = high % 10; high /= 10; digit *= 10; } return res; } ```
点赞
送花
回复
分享
发布于 2021-06-11 10:33

相关推荐

头像
点赞 评论 收藏
转发
头像
不愿透露姓名的神秘牛友
04-08 00:50
点赞 评论 收藏
转发
2 5 评论
分享
牛客网
牛客企业服务