各位大佬帮我看一下我怎么三十分

wcsjr 地铁七套收集者 2024-08-13 15:56:42 29

#include<bits/stdc++.h> using namespace std; int main() { long long n,i,j,m,g; j=0; g=0; cin>>n; for(i=1;i<=n;i++) { if(i%3==0) j=j-1; int v=i; int t=i; while(t>0) { g=t%10; t=t/10; v=v+g; } if(v==3) j=j-1; j=j+1; } cout<<j; }

{{ vote && vote.total.up }}

共 9 条回复

wcsjr 地铁七套收集者

@Joshua 非常感谢

Joshua Microsoft

看起来你的代码的目的是统计在从 1 到 n 的所有数字中,满足特定条件的数字的个数。然而,逻辑上有点问题。你在处理每个数字 i 时,先检查它是否能被 3 整除,然后处理数字的各位数字的和,并做一些判断和更新。这里有几点需要注意:

处理数字的各位和:你的逻辑是计算数字的各位之和,并检查它是否等于 3。但是在这部分,你直接将和 v 和 3 比较,这可能不符合预期。

逻辑错误:你先减去 1,然后检查和 v 是否等于 3,并减去 1。这可能导致计数结果不正确。

优化:可以更清晰地理解和实现你的需求。

修正代码 假设你的目标是统计在 1 到 n 的范围内,数字的各位和等于 3 或能被 3 整除的数字的个数,下面是修正后的代码:

#include <iostream>
using namespace std;

int main() {
    long long n, i, g;
    int count = 0;
    
    cin >> n;
    
    for (i = 1; i <= n; i++) {
        int v = i;
        int sum = 0;
        
        // 计算各位数字的和
        while (v > 0) {
            g = v % 10;
            sum += g;
            v /= 10;
        }
        
        // 如果数字能被 3 整除或各位和为 3,则计数
        if (i % 3 == 0 || sum == 3) {
            count++;
        }
    }
    
    cout << count;
    return 0;
}

代码解释 读取输入:读取上限 n。

循环处理:对每个 i 从 1 到 n,计算 i 的各位和。

条件判断:如果 i 能被 3 整除,或者它的各位和为 3,则增加计数。

输出结果:打印符合条件的数字的总数。

这样修改后的代码将正确统计符合条件的数字数量。

lyhldy CSP-J2二等

@wcsjr 等我写篇题解教你

lyhldy CSP-J2二等

这代码逻辑有问题啊…

lyhldy CSP-J2二等

待我格式化一下

#include<bits/stdc++.h> 
using namespace std; 
int main() { 
    long long n,i,j,m,g; 
    j=0; 
    g=0; 
    cin>>n; 
    for(i=1;i<=n;i++) { 
       if(i%3==0) j=j-1;	
       int v=i; 
       int t=i; 
       while(t>0) { 
          g=t%10; 
          t=t/10; 
          v=v+g; 
       } 
       if(v==3) 
       j=j-1; 
       j=j+1; 
     } 
     cout<<j; 
}
root 站长

@lyh198 别刷屏

elk

是我太蒟蒻了吗,看不懂你在干什么

wcsjr 地铁七套收集者

@lyhldy
3910

lyhldy CSP-J2二等

你得说第几题啊