求1000以内含3的自然数的个数

    int a,b,x,y,z,cont1,cont2;
for(int i=0;i<100;i++){
    a=i/10;
    b=i%10;
    if(a==3||b==3)
    cont1++;
}
for(int i=100;i<=999;i++){
    x=i/100;
    y=i/10%10;
    z=i%10;
    if(x==3||y==3||z==3){
        cont2++;
    }
}
cout<<cont2;
return 0; 

求第二段代码的错误 ,运行结果比答案多了一个数!

没有问题啊,cont1为19,说明十位个位有19个含3的数,1-9去掉3一个8个百位的cont1,加上300-399里100个,一共有19*8+100
252个含3的数,输出的结果也是252,从数学上计算显然cont2是252,你是输出不为252吗

看着没啥问题,cont2在for循环前是否设为0了? cont2 = 0;

不用那么复杂,你的cont1,cont2都没有初始化。

int main() {
    int x,y,cont=0;

    for(int i=3;i<=999;i++)
    {
        x=i;
        while(x)
        {
            y=x%10;
            if(y==3){
                cont++;
                break;
            }
            x/=10;
        }
    }
    cout<<cont;
    return 0; 

}

我运行的很正常啊
img

根据以上提供的代码:cont1=19,cont2=252,cont1+cont2=271,代码也是没问题的,
还有其他的写法:

public static void main(String[] args) {
    getNum();
  }

  /**
   * 求1000以内含3的自然数的个数
   *
   * @return num
   */
  public static int getNum() {
    int count = 0;
    for (int i = 0; i < 1000; i++) {
      if (String.valueOf(i).contains("3")) {
        count++;
      }
    }
    cout<<count;
    return count;
  }

img

运行结果:

第二段代码的错误,是说第二段统计不对吗。cont2的值多了1?

第16行代码打错了,是输出cont1+cont2 这样的输出值还是错的
求大神解答!