203 条题解
-
14
赵震昊 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; }
-
122017-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;
} -
62019-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!
点赞吧! -
42020-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'; }
-
22021-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();
} -
22021-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 普及组 */
-
22021-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; }
-
12022-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\) ,撒花!
-
12021-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; }
-
12020-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)
-
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; }
-
02021-10-24 11:27:15@
就枚举每个数字之中有多少个目标的数就行了复杂度 \(O(nlgn)\)。
```
#include<stdio.h>int n,x;
int ans;int main(){
scanf("%d%d",&n,&x);
for(int i=1;i<=n;i++){
int j=i;
while(j){
if(j%10==x) ans++;
j/=10;
}
}
printf("%d",ans);
return 0;
}
``` -
02021-10-22 14:14:36@
#include<iostream>
using namespace std;
int main()
{
int a,b=0,c,e;
cin>>a>>c;
for(int i=1;i<=a;i++)
{
e=i;
while(e>0)
{
if(e%10==c)
b+=1;
e=e/10;
}
}
cout<<b;
} -
02021-10-11 16:38:13@
n,x=input().split()
res=0
for i in range(1,int(n)+1):
res+=str(i).count(x)print(res)
-
02021-10-11 16:37:22@
n,x=input().split()
res=0
for i in range(1,int(n)+1):
res+=str(i).count(x)print(res)
-
02021-07-13 10:23:29@
#include <iostream>
using namespace std;
int main()
{
int n,x,sum=0;
cin>>n>>x;
for(int i=1; i!=(n+1); i++){
for(int t=i;t!=0;t/=10){
if((t%10)==x){
sum++;
}
}
}
cout<<sum<<endl;
return 0;
} -
02021-05-18 09:20:09@
import java.io.*; import java.util.*; /** * @author wpx * @version V1.0 * @Package com.test * @date 2021/5/17 14:13 */ public class Main { public static void main(String[] args) { Scanner sc = new Scanner(new BufferedReader(new InputStreamReader(System.in))); int endNum = sc.nextInt(); int findNum = sc.nextInt(); int[] fixedZeroNum = new int[]{0, 9, 108, 1107, 11106, 111105, 1111104, 11111103}; int[] zeroCountNum = new int[]{0, 1, 11, 111, 1111, 11111, 111111, 1111111}; // 先转换为字符串 String endNumStr = String.valueOf(endNum); int strEndPos = endNumStr.length() - 1; int count = 0; // 从前往后 for(int i = 0; i < endNumStr.length(); i++){ // 按照千位、百位、十位、个位的顺序 // 对应位置上的数字 Integer num = Integer.parseInt(String.valueOf(endNumStr.charAt(i))); // 位数 int digitNum = strEndPos - i; int preCount; if (findNum == 0) { // 特殊处理 if(digitNum == 0){ preCount = 0; } else { preCount = (int) ((digitNum - 1 ) * Math.pow(10, digitNum - 1)); preCount -= zeroCountNum[digitNum - 1]; } } else { preCount = (int) (digitNum * Math.pow(10, digitNum -1)); } if(findNum != 0){ if(num > findNum){ // 加上累计值 count += num * preCount; // 加上以findNum开头的数量 count += (int) Math.pow(10, digitNum); } else if (num < findNum) { // 加上累计值 count += num * preCount; } else { count += num * preCount; if(i + 1 < endNumStr.length()) { count += Integer.parseInt(endNumStr.substring(i + 1)); } count += 1; } } else { count += num * (preCount + digitNum); // 补上一位的0 if(num - 1 > 0 && digitNum - 1 >= 0){ count += (num - 1) * fixedZeroNum[digitNum - 1]; } // 补0 if(i != 0 && num - 1 > 0){ count += fixedZeroNum[digitNum]; } } } System.out.println(count); } }
信息
- ID
- 1848
- 难度
- 5
- 分类
- (无)
- 标签
- 递交数
- 16112
- 已通过
- 5636
- 通过率
- 35%
- 被复制
- 32
- 上传者