白準Python[2018]秀之和5
白駿2018号:獣の和5
任意の自然数Nは、いくつかの連続する自然数の和として表すことができる.ある自然数(1<=N<=10000)について、このnをいくつかの連続した自然数の和の指数として表したいと思います.この場合、使用する自然数はN以下であるべきである.
例えば、15を表す方法は、15、7+8、4+5+6、1+2+3+4+5の4種類がある.逆に10を表す方法は10,1+2+3+4の2種類がある.
Nを入力し、出力指数のプログラムを作成してください.
最初の行は整数Nを与える.
入力された自然数Nの出力は、いくつかの連続自然数の和を表す指数である.
最初はシルバー5問だったので二重でも時間を超えないと思います
質問する
任意の自然数Nは、いくつかの連続する自然数の和として表すことができる.ある自然数(1<=N<=10000)について、このnをいくつかの連続した自然数の和の指数として表したいと思います.この場合、使用する自然数はN以下であるべきである.
例えば、15を表す方法は、15、7+8、4+5+6、1+2+3+4+5の4種類がある.逆に10を表す方法は10,1+2+3+4の2種類がある.
Nを入力し、出力指数のプログラムを作成してください.
入力
最初の行は整数Nを与える.
しゅつりょく
入力された自然数Nの出力は、いくつかの連続自然数の和を表す指数である.
入力例1
15
プリメモリ出力1
4
に答える
最初はシルバー5問だったので二重でも時間を超えないと思います
N = int(input())
result = 1
for i in range(N//2):
cnt = i
for j in range(i+1, N):
cnt += j
if cnt == N: result += 1
elif cnt > N: break
print(result)
やっぱりタイムアウトだと思いました連続数字を加算するので、連続数字の和がNより大きい限り、開始数字の値を上げることができ、小さい場合は終了数字の値を上げることができます.N = int(input())
result = 1
start_num = 1
end_num = 2
sum_nums = 3
while start_num <= N//2:
if sum_nums < N:
end_num += 1
sum_nums += end_num
elif sum_nums > N:
sum_nums -= start_num
start_num += 1
else:
result += 1
end_num += 1
sum_nums += end_num
sum_nums -= start_num
start_num += 1
print(result)
Reference
この問題について(白準Python[2018]秀之和5), 我々は、より多くの情報をここで見つけました https://velog.io/@ohwoo-kwon/백준-파이썬-2018수들의-합-5-투포인터テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol