注册 登录
编程论坛 C++教室

这个代码如何修改?

btn 发布于 2021-01-31 11:08, 2025 次点击
题目描述
试计算在区间 1 到 n的所有整数中,数字x(0 ≤ x ≤ 9)x(0≤x≤9)共出现了多少次?例如,在 1到11中,1 出现了 4 次。

输入输出样例
输入
11 1
输出
4
[code][/co#include<iostream>
using namespace std;
int main(){
    int n,x;
    int cnt=0,b;
    cin>>n>>x;
    for(int j=1;j<=n;j++){
   
    for(int i=0;i<6;i++){
        b=j%10;
        
        if(b=x)   
        cnt++;
    }
}
cout<<cnt;
return 0;
}de]
4 回复
#2
雪影辰风2021-01-31 12:14
程序代码:
#include<iostream>
using namespace std;
int main()
{
    int n,x;
    int cnt=0,b;
    cin>>n>>x;
    for(int i = 0; i <= n; i+=10)
    {
        int a=i/10;
        if(a==x)
        {
            cnt+=(n-i+1>10)?10:n-i+1;
        }
        cnt+=(n-i>=x)?1:0;
    }
    cout<<cnt;
    return 0;
}

不清楚对不对,并且这代码只处理<100的范围,下次问题把数据范围说清楚
有几点是肯定的:
1.统计数字的出现不能按你那么去写,你只统计了个位的出现,没有十位或者更高位的
2.if语句里面,"="是赋值号,只要赋值成功,都会返回true,因此if会一直执行。"=="(两个赋值号)才是逻大小关系的等于
#3
btn2021-01-31 13:34
回复 2楼 雪影辰风
只有本站会员才能查看附件,请 登录
#4
雪影辰风2021-01-31 13:52
程序代码:
#include<iostream>
using namespace std;
int ans=0;
int n,x;
void doit(int);
int main()
{
    cin>>n>>x;
    for(int i=1; i<=n; i++)
        doit(i);
    cout<<ans;
    return 0;
}
void doit(int d)
{
    while(d!=0)
    {
        if(d%10==x)
            ans++;
        d/=10;
    }
    return;
}

记得有这个题,但是不记得名字了,这是另一道题代码改过来的
#5
btn2021-01-31 22:42
回复 4楼 雪影辰风
通过啦,谢谢
1