目次
A - Long Loong
問題
正の整数 X について、レベル X の 龍文字列 とは、1 個の L, X 個の o, 1 個の n,1 個の g をこの順に並べた文字列です。
正の整数 N が与えられるので、レベル N の龍文字列を出力してください。
制約
- $1≤N≤2024$
- N は整数
詳細はこちらです。
解説
o の部分のみdo文
で N 回分出力します。
なお龍文字列は改行せずに出力する必要があります。
write文
にadvance='no'
をつけ、改行を行わない様にします。
プログラム例
program abc336a
!N:整数
implicit none
integer N, i
!入力
read (*, *) N
!結果の出力
write (*, '(a1)', advance='no') "L"
do i = 1, N
write (*, '(a1)', advance='no') "o"
end do
write (*, '(a2)') "ng"
end program abc336a
B - CTZ
問題
正の整数 N に対して、N を 2 進表記したときに 末尾 に連続する 0 の個数を出力してください。
制約
- $1≤N≤10^9$
- N は整数
詳細はこちらです。
解説
btest(i,pos)
を用いて i 桁目が 1、0のどちらであるかを判定し、連続する 0 の個数を求めます。
プログラム例
program abc336b
!N :整数N
!cnt:末尾に連続する0の数
implicit none
integer N
integer cnt, i
!入力
read (*, *) N
cnt = 0
do i = 0, 40
if (btest(N, i)) then
exit
else
cnt = cnt + 1
end if
end do
!結果の出力
write (*, *) cnt
end program abc336b
C - Even Digits
問題
非負整数 n がn を 10 進法で表したときに、偶数の数字(0,2,4,6,8) のみで表せる時、n を 良い整数 と呼びます。
整数 N が与えられるので。良い整数のうち小さい方から N 番目の整数を求めてください。
制約
- $1≤N≤10^{12}$
- N は整数
詳細はこちらです。
解説
使ってもよい数字は (0,2,4,6,8)の5種類なので、5進数に置き換えることができます。
N を1桁目から5進数に変換して出力します。
プログラム例
program abc335c
!N:取り出したい良い整数の番号
!Ans:N番目の良い整数
implicit none
integer(8) N, Ans(100)
integer i, j, tmp
!読み込み
read (*, *) N
N = N - 1; Ans = 0
!良い整数の算定
if (N == -1) then !N=1の場合
write (*, '(i0)', advance='no') 0
stop
else !N=1より大きい
i = 1; tmp = 5
do
Ans(i) = mod(n, tmp)
N = N/5
if (N == 0) exit
i = i + 1
end do
end if
!結果の出力
do j = i, 1, -1
write (*, '(i0)', advance='no') Ans(j)*2
end do
end program abc335c