第1週のテーマ2 Flyme to the Alpha Centauri

1628 ワード


  • 質問リンク
    リンクテキスト

  • 計画と思考
    延伸と収縮はそれぞれ1つしかないので、最後は1で終わらなければならないので、現在の距離を基準に、次の移動を求める光年が+1か+0か、-1日を求める式を生成します.
    残距離は(現在値+1)+(現在値)+(現在値-1)+.+1以上の場合、光年+1を移動し、(現在値)+(現在値-1)+.+より小さくなります.1以上の場合は現在の移動光年を維持し、その他の場合-1の場合は移動すると合計何回かします.

  • に答える
  • def fly(start, end):
    	distance = end -start
    	current_jump_dist = 1
    	jump_count = 1
    	distance = distance - current_jump_dist
    	while distance != 0:
    		if current_jump_dist % 2 == 1:
    			factory_sum = (current_jump_dist +1 ) * (current_jump_dist // 2) + (current_jump_dist + 1) / 2
    		else:
    			factory_sum = (current_jump_dist + 1) * (current_jump_dist // 2)
    		upper_current = current_jump_dist + 1
    		lower_current = current_jump_dist - 1
    		if distance >= factory_sum + upper_current:
    			current_jump_dist = upper_current
    		elif distance >= factory_sum :
    			current_jump_dist = current_jump_dist
    		else:
    			current_jump_dist = lower_current
    		distance = distance - current_jump_dist
    		jump_count += 1
    	return jump_count 	
    output_array=[]
    num_loop=int(input())
    for num in range(num_loop):
    	start,end=map(int,input().split())
    	output_array.append(fly(start,end))
    	for num in range(num_loop):
    	print(output_array[num])

  • 説明するときに出会う困難と苦悩.
    factory sum計算式にはカッコがなく、結果が異なる点.pythonバージョンに従って入力します.split()は正常に使用されていない問題です.+1,0,1を判断する条件文では,=の有無によって変化する結果である.

  • 釈義後に知る概念と感想
    1行1行減らす方法はコード上のほうがいいですか、それともコード上のほうがいいですか.for文はよく見えるが,結果は時間的複雑度がO(n)であり,逆に計算式を用意すればO(1)の方が簡単である.