213 条题解
-
20赵震昊 LV 6 @ 2018-12-03 15:41:32
#include<iostream> using namespace std; int main(){ int n,x,sum=0; cin>>n>>x; for(int i=1;i<=n;i++){ int t=i; while(t>0){ if(t%10==x) sum++; t/=10; } } cout<<sum<<endl; return 0; }
-
142017-02-26 13:33:44@
#include <stdio.h>
int main()
{
int i,n,x,k=0,j;
scanf("%d %d",&n,&x);
for(i=1;i<=n;i++)
{
j=i;
while(j)
{
if(j%10==x)
k++;
j=j/10;}
}
printf("%d",k);
return 0;
} -
82019-08-18 15:16:54@
还是先分析思路:
1. 输入数据,终止点和查找字符
2. for循环判断1. 定义临时判断数据temp,将它的值设为控制器i的值
2. while循环1. 条件:temp > 0(原因后面再说)
2. 如果temp的末位是x,则ans++,然后temp去掉末位继续判断(原因知道了吧)
3.输出ans//C++ #include <iostream> using namespace std; int main() { int n,x,ans = 0; cin >> n >> x; for(int i = 1;i <= n;i++) { int temp = i; while(temp > 0) { if(temp % 10 == x) { ans++; } temp /= 10; } } cout << ans << endl; }
这题比较简单,稍微有些基础的人就可以做出来
祝大家AC!
点赞吧! -
62020-08-01 19:17:28@
数位dp写法,全部1ms
#include <bits/stdc++.h> #define fu(a, b, c) for (int a = b; a <= c; a++) #define fd(a, b, c) for (int a = b; a >= c; a--) using namespace std; int a[10],dp[10][10][2],n,q,cnt; int dfs(int pos,int sta,int pre,int limit) { if(pos==-1) return sta; if(!limit&&dp[pos][sta][pre]!=-1) { return dp[pos][sta][pre]; } int up=limit?a[pos]:9,tmp=0; fu(i,0,up) { int nsta=sta+(i==q); if(!q&&!pre) nsta=sta; tmp+=dfs(pos-1,nsta,i||pre,limit&&i==a[pos]); } if(!limit) dp[pos][sta][pre]=tmp; return tmp; } int solve(int x) { cnt=0; memset(dp,-1,sizeof dp); while(x) { a[cnt++]=x%10; x/=10; } return dfs(cnt-1,0,0,1); } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n>>q; cout<<solve(n)<<'\n'; }
-
32022-05-08 17:57:13@
- 输入 \(n,x\)
- 遍历 \(1\) ~ \(n\)
- 分解枚举到的数,求出每一位
- 依次判断是否与 \(x\) 相等
分解代码:
//t为要分解的数 //x即为题中原意 //ans为x在t中的数量 while (t) //t不为0 { if (t % 10 == x) //如果t的最后一位等于x { ans ++ ; //ans加1 } t /= 10; //t每次去掉最后一位 }
完整代码:
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <cmath> using namespace std; int main() { int n, x, t, ans = 0; //注意ans初始化0 scanf("%d%d", &n, &x); //输入 for (int i = 1; i <= n; i ++ ) //遍历 { t = i; //不能把i直接分解,因为如果这样,i在分解过程中数值就会改变,遍历的过程就会出现问题 while (t) //t不为0 { if (t % 10 == x) //如果t的最后一位等于x { ans ++ ; //ans加1 } t /= 10; //t每次去掉最后一位 } } printf("%d", ans); //输出结果 return 0; }
完美 \(AC\) ,撒花!
-
32021-12-30 14:10:15@
//字符串也行
#include<iostream>
using namespace std;
#include<string>
void test106()
{
int n;
int x;
cin >> n >> x;
int count = 0;
for (int i = 1; i <= n; i++)
{
string f = to_string(i);
for (int i = 0; i < f.size(); i++)
{
if ((f[i]-'0') == x)
count++;}
}
cout << count << endl;
}
int main()
{
test106();
} -
32021-08-27 17:59:39@
//哪里不是纯模拟了(附上题面喽) #include<bits/stdc++.h> using namespace std; int main() { int a,m,t=0,d; cin>>a>>m; for(int i=1; i<=a; i++) { d=i; while(d>=10) {//统计d中的数字 if(d%10==m) t++; d=d/10; } if(d==m) t++; } cout<<t; return 0; } /* 记数问题 描述 试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1 到 11 中,即在 1、2、3、4、5、6、7、8、9、10、11 中,数字 1 出现了 4 次。 格式 输入格式 输入共 1 行,包含 2 个整数 n、x,之间用一个空格隔开。 输出格式 输出共 1 行,包含一个整数,表示 x 出现的次数。 样例1 样例输入1 11 1 Copy 样例输出1 4 Copy 限制 每个测试点1s。 提示 对于 100%的数据,1≤ n ≤ 1,000,000,0 ≤ x ≤ 9。 来源 NOIP 2013 普及组 */
-
32021-03-13 10:16:51@
暴力出奇迹
#include<iostream> using namespace std; int main(){ long long a,b,c=0; cin>>a>>b; int ans=0; for(int i=1;i<=a;i++){ c=i; while(c>0){ if(c%10==b){ ans++; } c=c/10; } } cout<<ans; return 0; }
-
22021-11-03 08:46:28@
#include <stdio.h> int main(){ int startnum,target,n,aray[10]={0}; scanf("%d %d",&startnum,&target); for(;startnum;startnum--) for(n=startnum;n;n/=10) aray[n%10]++; printf("%d",aray[target]); return 0; }
-
22020-12-22 16:33:47@
我永远爱CSDN
https://blog.csdn.net/beguile/article/details/103635707 学的函数
Python 永远的神
三行哈哈哈哈TempNum = input().split(' ') list1 = str(list(range(1,int(TempNum[0])+1))) print(list1.count(TempNum[1]))
所以python永远的神(bushi)
暴力(会超时)TempStr = input() TempNum = TempStr.split(' ') n = int(TempNum[0]) x = int(TempNum[1]) ans = 0 for i in range(1,n+1): Temp = i while(Temp>0): if (Temp%10==x): ans+=1 Temp//=10 print(ans)
-
12024-08-27 20:08:27@
#include <iostream> using namespace std; int main(void) { int n, x, tmp, ans = 0; cin >> n >> x; for (int i = 1; i <= n; i++) { tmp = i;//保存数据 while (tmp) {//数位拆分 if (tmp % 10 == x)//找到了 ans++;//统计 tmp /= 10;//数据除以10,找下一位 } } cout << ans; return 0; }//已AC
点个赞再走呗。
-
12024-07-23 21:05:14@
AC代码
思路分析:
作为本人的第一篇题解,还是有点小激动的>_<
1.输入数据
2.数位分离+遍历 1-n (可以用 for 实现)
3.累计答案 ANSCode
cin,cout 版#include <iostream> using namespace std; int n,x,ans; int main() { cin>>n>>x; int tmp; for(int i=1;i<=n;i++){ tmp=i; while(tmp>0){ if(tmp%10==x) ans++; tmp/=10; } } cout<<ans<<endl; return 0; }
如果想再快一点,可以使用 scanf,printf 等函数,这里就不给出代码啦
最后,分享一个链接,有兴趣的可以学学:快读快写(炸裂版)
祝各位 RP++,AK NOI!
Powered By 一个努力进步的蒟蒻
2024.7.23晚 -
12023-12-30 18:17:45@
#include<bits/stdc++.h> using namespace std; int n,x,sum; int main() { cin>>n>>x; int i=1; while(i<=n) { int k=i; while(k>0) { if(k%10==x) sum++; k/=10; } i++; } cout<<sum<<endl; return 0; }
qwq
-
12023-09-08 15:18:02@
#include<iostream> using namespace std; int main(){ int n,x,t,k,ans=0; cin>>n>>x; for(int i=1;i<=n;i++){ t=i; while(t){ k=t%10; if(k==x) ans++; t=t/10; } } cout<<ans<<endl; return 0; }
-
02024-01-29 21:49:41@
#include<bits/stdc++.h> #define ull unsigned long long #define ll long long #define fo(i,l,r) for(int i=l;i<=r;i++) #define fd(i,r,l) for(int i=r;i>=l;i--) using namespace std; int a,b,ans; signed main(){ cin>>a>>b; fo(i,1,a){ int tmp=i; while(tmp)ans+=(tmp%10==b),tmp/=10; } cout<<ans; return 0; }
-
02023-08-29 15:53:15@
n, x = input().split(' ')
count = 0for i in range(1, int(n)+1):
count += str(i).count(x)
print(count) -
02023-05-30 20:10:00@
难度不大。
核心代码:int a[42]; //存每个数字出现了几次 void solve(int num){ while(num){ ans[num%10]++; num/=10; } } //分解num并存储
完整代码:
#include<bits/stdc++.h> using namespace std; int ans[42],num,x; void solve(int num){ while(num){ ans[num%10]++; num/=10; } } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>num>>x; for(int i=1;i<=num;i++) solve(i); cout<<ans[x]<<endl; return 0; } //@syhx
-
02022-09-30 20:40:05@
//题目给的n的范围是10^7这么大,所以时间复杂度要在O(n)左右 #include<iostream> using namespace std; int main(){ int n,x,ans=0; cin>>n>>x; for(int i=1;i<=n;i++){ //用s存i防止出问题无限循环 int s=i; while(s){//如果s不为零就一直循环 if(s%10==x)ans++;//取最后一位,如果和x一样,ans++ s/=10;//把最后一位删了 } //输出ans } cout<<ans; return 0; }
-
02022-06-24 20:59:33@
#include<iostream>
using namespace std;
int main(){
int n,x,sum=0;
int p;
cin>>n>>x;
for(int i=1;i<=n;i++){
p=i;
while(p>0){
if(p%10==x){
sum++;
}
p=p/10;
}
}
cout<<sum;
} -
02022-06-23 17:30:04@
#include <iostream> using namespace std; int main() { int n,res=0,m; cin >> n >> m; for (int i = 1;i <= n;i ++) { int ans = i; while (ans > 0) { if (ans % 10 == m) { res ++; } ans /= 10; } } cout << res; return 0; }
信息
- ID
- 1848
- 难度
- 5
- 分类
- (无)
- 标签
- 递交数
- 16558
- 已通过
- 5790
- 通过率
- 35%
- 被复制
- 36
- 上传者