8 条题解
-
3
题解
这道题太氵了,如果你看过
[入门][NOIP2010 普及组] 数字统计
那么我的题解里就有这道题。 直接套用过来,,完成。 当然我们还是写一遍正常的。#include <bits/stdc++.h> using namespace std; int n, ans, k; int check(int num) { int ans = 0; while (num > 0) { ans += (num % 10) == k; num /= 10; } return ans; } int main() { scanf("%d%d", &n, &k); for (int i = 1; i <= n; i++) ans += check(i); printf("%d\n", ans); return 0; } // 实在没啥可写的了
#include <bits/stdc++.h> using namespace std; int n, ans, k; int check(int num) { int ans = 0; while (num > 0) { ans += (num % 10) == k; num /= 10; } return ans; } int main() { scanf("%d%d", &n, &k); for (int i = 1; i <= n; i++) ans += check(i); printf("%d\n", ans); return 0; }
-
1
定义一个函数来查找: to_string 是C++98没有的 可以用C++ 14或C++ 11
</span>#include <iostream> #include <string> using namespace std; int count_ccurrences(int n, int x) { int count = 0; for (int num = 1; num <= n; num++) { string numStr = to_string(num); for (char c : numStr) { if (c - '0' == x) { count++; } } } return count; } int main() { int n, x; cin >> n >> x; int result = count_ccurrences(n, x); cout << result << endl; return 0; }
-
1
这不跟[NOIP2010 普及组] 数字统计差不多吗???
————————————————————————————————————————
思路: 从1~n过一遍,每次将 i 分解,判断 i 的每一个数位 t 是不是 x 。
————————————————————————————————————————
//l是1~n,r是出现了多少次 for(int i=1;i<=l;i++) //循环开始 { int num=0; int j=i; //这个不加打0分 while(j>0) { int t=j%10; if(t==r) //判断 num++; j/=10; } sum+=num; }
最后求个赞!
-
1
正常思路:
#include <cstdio> inline int reader(){ 省略 } int n , x , ans; short finder(int a){ //遍历每一位,计算 int al = 0 ; if(a == 0 && x == 0) al ++ ; while(a) al += (a % 10 == x), a /= 10 ; return al ; } int main(){ n = reader() ; x = reader() ; for(int i = 1 ; i <= n ; i ++) ans += finder(i); printf("%d" , ans) ; return 0 ; } //内存小,但时间长容(bu)易(hui)超时
另一个思路
#include <cstdio> inline int reader(){ int it = 0 , chr = getchar() ; while('0' > chr || chr > '9') chr = getchar() ; while('0' <= chr && chr <= '9') it = (it << 3) + (it << 1) + chr - '0' , chr = getchar() ; return it ; } int n , x , ans , f[1000005]; short finder(int a){ //众所周知,a包含几个n 就是 a % 10 和 a / 10 包含的n和 //所以可以额外消耗亿点点内存换更快的速度 if(a < 10) return (f[a] = (a % 10 == x)) ; //个位单独处理 f[a] = f[a / 10] + f[a % 10] ; //否则就相加 return f[a] ; } int main(){ n = reader() ; x = reader() ; f[0] = (x == 0); for(int i = 1 ; i <= n ; i ++) ans += finder(i); printf("%d" , ans) ; //其他真没啥好说的 return 0 ; }
- 1
信息
- ID
- 1482
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 348
- 已通过
- 194
- 上传者