質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1710閲覧

paizaのミニゲーム(Bランク相当)でテストが通らない

kazuki_t

総合スコア8

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/03/07 01:05

paizaのゲームでBランクの問題でテストが全て通らず苦戦しています。
※スキルチェック問題ではなくミニゲームの問題です。

イメージ説明
入力された数値の各桁を四捨五入し、入力された数値に対して最大値になるようなプログラムの作成が目的です。

以下コード

# coding: utf-8 number = list(input()) i = -1 for num in range(len(number)): if 5<= int(number[i]) < 10: number[i] = "0" if i == -len(number): number.insert(i-1, "1") else: number[i-1] = str(int(number[i-1]) + 1) i -= 1 result = ''.join(number) print(result)

考慮漏れの指摘や検証方法のアドバイスをいただければと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2018/03/07 01:19

仕様がよく分からない。「五入」の処理はあるけど「四捨」の処理が無いようですが。入力が 4, 5, 45, 54 の出力がどうなればいいのか教えて下さい。
can110

2018/03/07 01:25

入力「195」の正しい結果はいくつですか?
guest

回答2

0

ベストアンサー

なんとなく分かったので、とりあえず自己流。

python

1number = int(input()) 2digit = 10 3numbers = [] 4while number > 0: 5 numbers.append(number) 6 if number % digit >= digit / 10 * 5: 7 number += digit 8 number = int(number / digit) * digit 9 digit *= 10 10print(max(numbers))

間違い指摘

その1

python

1number[i-1] = str(int(number[i-1]) + 1)

number[i-1]が9のときの桁上りが考慮されていない。

その2

python

1number[i] = "0"

「五入」のときしか0にしていないが、「四捨」のときも0にしないといけない。
(ようするに、常に0にしないといけない。それが四捨五入!)

その3

出力が最大値になっていない。(最終結果を出力している)

投稿2018/03/07 06:02

編集2018/03/07 06:23
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

無限に続くと感じた「進捗優先」の末に問題文にたどり着きました。

1 以上の整数 A が与えられます。

A の好きな桁に対して好きな順番で好きな回数だけ四捨五入をおこなって、できるだけ大きな整数を作ってください。

255の入力に対して正解が310ではなく300なのがポイントなのですね…

python

1A = [int(i) for i in reversed(input())] 2 3def f(A, p): 4 if A[p] >= 5: 5 if p == len(A)-1: 6 A.append(1) 7 else: 8 A[p+1] += 1 9 A[:p+1] = [0]*(p+1) 10 return p+1 11 else: 12 return p-1 13 14p = len(A)-1 15while p >=0: 16 p = f(A, p) 17 18print(''.join(str(v) for v in reversed(A)))

> 引用テキスト入力された数値の各桁を四捨五入し、入力された数値に対して最大値
四捨五入すると最大値になるとは限らないので、問題がわからなかったのですが、
888が入力された時に999なら上のprint、1000なら下のprint。

python

1# coding: utf-8 2s = input() 3n = int('9'*len(s)) 4print(n) 5print(n+1)

投稿2018/03/07 02:58

編集2018/03/08 16:47
mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問