213 条题解
-
-1cglnb123 LV 3 @ 2023-08-20 19:16:31
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int n = 0;
int x = 0;
scanf("%d%d", &x, &n);
int i = 0;
int num = 0;
for (i = 1; i <= n; i++)
{
int j = i;
while (j)
{
if (j % 10 == x)
{
num++;
}
j = j / 10;
}
}
printf("%d\n", num);
return 0;
} -
-12020-05-28 19:17:36@
#include<cstdio>
using namespace std;
int n, x, ans = 0;
int main() {
scanf("%d %d", &n, &x);
for(int i = 1; i <= n; i++) {
int k = i;
while(k) {
if(k % 10 == x) ans++;
k /= 10;
}
}
printf("%d\n", ans);
} -
-12019-12-17 20:19:51@
#include<iostream>
using namespace std;
int main()
{
int k,a,j=0;
cin>>k>>a;
for(int i=1;i<=k;i++)
{
int t=i;
while(t>=10)
{
if(t%10==a) j++;
t=t/10;
}
if(t==a) j++;
}
cout<<j;
return 0;
} -
-12019-11-27 01:05:11@
#include<iostream>//有点小题大作了,没往暴力的角度想。但谁能保证以后不会有更大的数据
#include<cstring>//去卡这个O(n)的暴力呢?
#include<ctime>
#include<cstdlib>
using namespace std;
//abcdefg
int main()
{//wa点:注意0和其他的数字不一样,不允许除0以外的数有前导零,但我们不能输出0,范围
int a, b;
cin>>a>>b;
int sum = 0;
int p = 1;//设当前被切割的位置是i,i前面的十进制数记为A,后面的记为B。没有位就是0
while(a / p > 0){
if((a / p) % 10 > b){
sum += (a / (10 * p) + 1) * p;//(A+1)*整个空间 ,从0~99··9,这里9就是B的位数
}
else if((a / p) % 10 == b){
sum += (a / (10 * p)) * p + (a % p + 1);//前面的项取到最大值时,后面只能取0~B
}
else{
sum += (a / (10 * p)) * p;
}
if(b == 0)
sum -= p;
p *= 10;
}
cout<<sum<<endl;
return 0;
}
//21 1 13=> 1、11、21、 10、11、12、13、14、15、16、17、18、19共13次
//221 1 => 1、11、21··221 23个
// => 10、11··19;110、111···119;210、211···219 30个
// => 100~199 100个 共153次
//221 3 => 3、13、23··213 22个
// => 30、31··39;130、131···139 20个
// => 0个 共42次
//WA点 221 0 => 0、10、20···220 23个
// =>100、101··109;200、201···209 20个 -
-12019-11-12 17:22:41@
#include<iostream>
using namespace std;
int main()
{
int n,i,x,a,sum=0;
cin>>n>>x;
for(i=1;i<=n;i++)
{
a=i;
while(a>0)
{
if(a%10==x)
{
sum++;
}
a=a/10;
}
}
cout<<sum;
} -
-12019-11-07 19:23:07@
#include<iostream> #include<cstdio> #include<cmath> #include<string> #include<cstdlib> #include<algorithm> using namespace std; int main() { int a,b,ans=0; cin>>a>>b; for(int n=1;n<=a;n++) { int fornow=n; while(fornow>0) { if(fornow%10==b)ans++; fornow/=10; } } cout<<ans; return 0; }
-
-12019-08-15 21:42:58@
#include<bits/stdc++.h>//头文件
**#include<bits/stdc++.h>//头文件
using namespace std;//标准命名空间
int main(){//程序入口
int n,cnt=0,x;
cin>>n>>x;
for(int i=1;i<=n;i++){
int temp=i;
while(temp>0){
if(temp%10==x) cnt++;
temp/=10;
}
}
cout<<cnt;
return 0;//返回0,程序结束
}
**
就是这么简单 -
-12019-06-29 19:39:01@
var
res,m,n,j,i:longint;
s,t:string;
begin
readln(n,m);
str(m,t);
for i:=1 to n do
begin
str(i,s);
for j:=1 to length(s) do
if s[j]=t then inc(res);
end;
writeln(res);
end.字符串查找解决,避免了运算费时等问题,最长用时不过52毫秒。
#1 Accepted 1ms 128.0 KiB
#2 Accepted 0ms 128.0 KiB
#3 Accepted 40ms 128.0 KiB
#4 Accepted 1ms 128.0 KiB
#5 Accepted 52ms 128.0 KiB
#6 Accepted 30ms 128.0 KiB
#7 Accepted 0ms 128.0 KiB
#8 Accepted 28ms 128.0 KiB
#9 Accepted 50ms 128.0 KiB
#10 Accepted 51ms 128.0 KiB -
-12019-05-26 17:15:59@
#include<iostream> using namespace std; int x,ans,n; int main() { cin >> x >> n; for(int i=1;i<=x;++i) { int q=i; while(q>0) { if(q%10==n)++ans; q/=10; } } cout << ans << endl; return 0; }
-
-12019-04-25 13:17:41@
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x,k=0;
cin>>n>>x;
for(int i=1;i<=n;i++){
int j=i;
while(j){
if(j%10==x)k++;
j/=10;
}
}
cout<<k;
return 0;
} -
-12019-04-20 07:45:11@
1ms Accepted
#include <cmath>
#include <iostream>
#include <stdio.h>using namespace std;
int main()
{
int n, nn, x, digit;
cin >> n;
cin >> x;
nn = n;
if (n < 10) {
if (x != 0) {
cout << (n >= x ? 1 : 0);
} else {
cout << 0;
}
return 0;
}digit = (int)log10(n);
int* regist = new int[digit];
regist[0] = 1; // once in 10
for (int i = 1; i < digit; i++) {
// first digit + 10 * rest digits
regist[i] = pow(10, i) + 10 * regist[i - 1];
}int* nums = new int[digit + 1]; // each digits
int* residue = new int[digit + 1];
for (int i = digit; i >= 0; i--) {
nums[digit - i] = nn / (pow(10, i));
nn -= nums[digit - i] * (pow(10, i));
residue[digit - i] = nn;
}int result = 0;
if (x != 0) {
for (int i = 0; i < digit; i++) {
result += nums[i] * regist[digit - i - 1];
if (nums[i] == x) {
result += (residue[i] + 1);
} else if (nums[i] > x) {
result += pow(10, digit - i);
}
}
if (residue[digit - 1] >= x) {
result += 1;
}
} else {
// sum numbers of zeros at each digit
for (int i = 1; i < digit + 1; i++) {
if (nums[i] > 0) {
result += (pow(10, digit - i) * (n / (int)pow(10, digit - i + 1)));
} else {
result += (pow(10, digit - i) * (n / (int)pow(10, digit - i + 1) - 1));
result += (residue[i] + 1);
}
}
}
cout << result;delete[] regist;
delete[] nums;
delete[] residue;
return 0;
} -
-12018-12-24 22:48:53@
n,x = input().split() n = int(n) alist=[] for i in range(1,n+1): alist.append(str(i)) alist=''.join(alist) result = alist.count(x) print(result)
-
-12018-12-03 15:57:07@
#include<iostream>
#include<string>
#include<math.h>
#include<string.h>
using namespace std;
int cnt=0;
int n;
int x;
int main(){
cin>>n;
cin>>x;
for(int i=1;i<=n;i++){
int t=i;
while(t>0){
if(t%10==x){
cnt++;
}
t/=10;
}
}
cout<<cnt;
return 0;
} -
-12018-11-24 16:20:18@
#include <bits/stdc++.h>
using namespace std;
int a,x,sum;
int j,i;
int main()
{
cin>>a>>x;
for(i=1;i<=a;i++)
{
j=i;
while(j>0){
if(j%10==x)
sum++;//分离位数
j=j/10;//更新
}
}
cout<<sum<<endl;
return 0;
}
本蒟蒻本来想用函数做,但想想还是算了
懒得去打,直接写个最简单的 -
-12018-11-17 19:06:55@
c++代码
#include<bits/stdc++.h>
using namespace std;
int n,x,ans;
void js(int n){
while(n){
if(n%10==x) ans++;
n/=10;
}
}
int main(){
scanf("%d%d",&n,&x);
for(int i=1;i<=n;i++) js(i);
printf("%d",ans);
return 0;
} -
-12018-11-07 17:30:34@
Go语言的来啦~
package main
import "fmt"
var (
n int
x int
j int=0
)func main() {
fmt.Scanln(&n, &x)
for t:=1; t < n+1; t++ {
i := t
for {
if i < 10 {
if i == x {
j++
break
} else {
break
}
}else {
if i%10 == x {
j++
i = i/10
} else {
i = i/10
}
}
}
}
fmt.Println(j)
} -
-12018-10-06 09:01:50@
啦啦啦,我来水题了
#include <stdio.h>
long search(long n,long x)
{
long total=0;
for (long i=1;i<=n;i++)
{
long j=i;
while (j!=0)
{
int k=j%10;
if (k==x)
{
total=total+1;
}
j=j/10;
}
}
return total;
}int main()
{
long n,x;
scanf("%ld %ld",&n,&x);
printf("%ld\n",search(n,x));
} -
-12018-09-23 18:01:45@
枚举+模运算
由于n最大是1000000所以不会超时
不知道有没有更快的做法#include <iostream> #include <cstdlib> using namespace std; int main() { int sum=0; int n; int p; int tmp; cin>>n>>p; for(int i=1;i<=n;i++) { tmp=i; while(tmp>0) { if(tmp%10==p) sum++; tmp/=10; } } cout<<sum<<endl; return 0; }
-
-12018-09-05 08:42:13@
#include <iostream>
using namespace std;
int main()
{
int n,x,i,t,ans=0;
cin>>n>>x;
for(i=1;i<=n;i++){
t=i;
while(t>0){
if(t%10==x){
ans++;
}
t/=10;
}
}
cout<<ans;
return 0;
} -
-12018-09-04 20:46:06@
#include <iostream>
using namespace std;
int main()
{
int a,b,sum=0;*//sum为出现次数*
cin>>a>>b;
for(int i=1;i<=a;i++)
{int c=i;
while(c>0){if(c%10==b)sum=sum+1;c=c/10;}*//分析每一个数位上的数*
}
cout<<sum;*//输出*
return 0;
}
信息
- ID
- 1848
- 难度
- 5
- 分类
- (无)
- 标签
- 递交数
- 16580
- 已通过
- 5806
- 通过率
- 35%
- 被复制
- 36
- 上传者