LoginSignup
1
0

More than 3 years have passed since last update.

はじめてのプロコンメモ(その5)

Last updated at Posted at 2019-06-26

はじめに

AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~の類題もやっています
第 5 問(200 点)問題を解いています。

B - Some Sums

問題文

1以上 N以下の整数のうち、10進法での各桁の和が A以上 B以下であるものの総和を求めてください。

標準入力例

20 2 5

考えた解答

これは自力で解けなかったので解答をみてPythonに書き直した
躓いたところ
- n = round(n/10)割り算の丸め込みができてなくて最後の条件に合わなかった
下記で書いてもテストが通らなかった

N, A, B = map(int, input().split())

def find_sum_of_digits(n):
  sum = 0
  while n >0:
    sum = sum + n%10
    n = round(n/10)
  return sum

total = 0
for number in range(1,N+1):
  all_sum = find_sum_of_digits(number)
  if A <= all_sum and all_sum <= B:
    total = total + number

print(total)  

解答改善策

これを見てむしろ文字列にして桁を数えれば良いのではと思いたち改善したら通った
https://note.nkmk.me/python-digit-int-float/

N, A, B = map(int, input().split())

def find_sum_of_digits(n):
  s = str(n)
  sum = 0
  #Stringに変換桁数を数える

  for i in range(0,len(str(n))):
    sum = sum + int(s[i])
  return sum

total = 0
for number in range(1,N+1):
  all_sum = find_sum_of_digits(number)
  if A <= all_sum and all_sum <= B:
    total = total + number

print(total)

ABC 080 B - Harshad Number

問題

整数 Xを十進法で表したときの各桁の数字の和を f(X)としたとき、Xが f(X)で割り切れる場合、Xはハーシャッド数です。整数 N が与えられるので、ハーシャッド数かどうか判定してください

解答

これも配列にとりあえず入れて、数を数えて解決してしまった

X = int(input())

char_list = list(str(X))
data2 = map(lambda x: int(x), char_list)
data3 = list(data2)
if X % sum(data3) == 0:
    print("Yes")
else:
    print("No")
1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0