如题:
代码如下
report zjiang1 .
data : sum type i,
max type i value 100.
while max <= 1000.
max = max + 1.
data itmp type i.
itmp = sy-index * 3.
itmp = sy-index mod 2.
if itmp <> 0.
continue.
endif.
sum = sum + sy-index.
endwhile.
write: 'sum=', sum.
逻辑有点混乱,求大神指点。
建议直接从102开始,然后每次+3,效率比较高
report zjiang1 .
data : sum type i,
max type i value 99. //建议直接用99开始,然后+3,效率高不少
while max <= 1000.
max = max + 3.
data itmp type i.
itmp = sy-index * 3.
itmp = sy-index mod 2.
if itmp <> 0.
continue.
endif.
sum = sum + sy-index.
endwhile.
write: 'sum=', sum.
report zjiang1 .
data : sum type i,
max type i value 100.
while max <= 1000.
max = max + 2.
data itmp type i.
itmp = sy-index * 3.
if itmp <> 0.
continue.
endif.
sum = sum + sy-index.
endwhile.
write: 'sum=', sum.
1、首先被3整除的数很有特点,即各个位数加起来能被3整除,则这个就就能被3整除(如,123,1+2+3=6,可以被3整除,即123可以被3整除),
所以在(100,1000)之间所有能被3整除的数即为以102位首位,999为尾位的等差数列,公差d=3
2、要求是偶数,则在1的基础上d=3*2即可,所以题目就变成未以102位首位,996为尾位的等差数列,公差d=6的数列
3、等差数列公式,直接就出结果了。
扩展:类似的题目找出首位、尾位然后公差。套用等差数列公式就出来了
1、首先被3整除的数很有特点,即各个位数加起来能被3整除,则这个就就能被3整除(如,123,1+2+3=6,可以被3整除,即123可以被3整除),
所以在(100,1000)之间所有能被3整除的数即为以102位首位,999为尾位的等差数列,公差d=3
2、要求是偶数,则在1的基础上d=32即可,所以题目就变成未以102位首位,996为尾位的等差数列,公差d=6的数列
3、等差数列公式,直接就出结果了。
扩展:类似的题目找出首位、尾位然后公差。套用等差数列公式就出来了
Sn=n*(a1+an)*d/2
其中n=(an-a1)/d+1=(996-102)/6+1=150
直接套用公式Sn=150(102+996)/62 = 82350
其中黑色标注的字体就说程序里的代码公式