以下の問に答えよ。
下に示すように、非負の整数 n をキーボードから受け取って、n から 0 まで整数を表示し、
区切りとして、各数の後に , を表示するが、
4 で割り切れる整数のあとは , の代わりに ; を
9 で割り切れる整数のあとは , も ; もつけずに改行(\n)を
出力するプログラムを作成せよ。
(n として負の数を受け取ったときは、何も出力しない。)
以下の実行例では、改行を出力しているところを
↵ で示している。
非負の整数を入力してください: 18↵ 18↵ 17,16;15,14,13,12;11,10,9↵ 8;7,6,5,4;3,2,1,0↵実行例 2:
非負の整数を入力してください: 50↵ 50,49,48;47,46,45↵ 44;43,42,41,40;39,38,37,36↵ 35,34,33,32;31,30,29,28;27↵ 26,25,24;23,22,21,20;19,18↵ 17,16;15,14,13,12;11,10,9↵ 8;7,6,5,4;3,2,1,0↵実行例 3:
非負の整数を入力してください: 0↵ 0↵実行例 4:
非負の整数を入力してください: -1↵
下に示すように、0 以上の数 n をキーボードから受け取って、
ディスプレイ上に、一番最初に begin と表示し、空行を開けずに、
次の行に数字を n 個表示したあとに、# を 1 個表示し、下に行くにつれて数字が 1 つずつ少なくなって、
その代わりに右側の # が 1 文字ずつ長くなっていき、最後に数字が 1 個、 # が n 個
になった行で終了するプログラムを作成せよ。そのあとに(空行をあけず)end と表示せよ。
表示する数字は 1 ずつ増えていく数の一の位 (1234567890123…) を繰り返すようにせよ。
ただし、# を表示するときも裏で数が
3 ずつ増えていく(14703692581…)ようにせよ。
この問題は if 文や条件演算子を使用せず、制御構造としては for 文または while 文のみを使用せよ。
(n として負の数または 0 を受け取ったときは、begin 〜 end のみ表示する。)
以下の実行例では、改行を出力しているところを
↵ で示している。
非負の整数を入力してください: 5↵ begin↵ 12345#↵ 9012##↵ 901###↵ 12####↵ 5#####↵ end↵実行例 2:
非負の整数を入力してください: 13↵ begin↵ 1234567890123#↵ 789012345678##↵ 56789012345###↵ 5678901234####↵ 789012345#####↵ 12345678######↵ 7890123#######↵ 567890########↵ 56789#########↵ 7890##########↵ 123###########↵ 78############↵ 5#############↵ end↵実行例 3:
非負の整数を入力してください: 0↵ begin↵ end↵
漸化式:
\[ \left\{\begin{align*} a_1 &= 4\\ a_k &= \lfloor 5 a_{k-1} / 4 \rfloor & (k > 1) \end{align*}\right.\]
で表される数列の最初の n 項のなかに現れる偶数の個数を返す関数 int oddc54(int n) を作成せよ。
ただし \(\lfloor\ldots\rfloor\) は切り捨てを表す記法である。
\(a_n\) は \(4, 5, 6, 7, 8, 10, 12, 15, 18, 22, 27, \ldots\) という数列なので
例えば
oddc54(3) は 2、 oddc54(10) は 7 である。
また、main 関数は、このoddc54 関数を呼び出して、oddc54(0),
oddc54(5), oddc54(10), oddc54(20), oddc54(30),
oddc54(50) の値を
oddc54(0) = 0 oddc54(5) = 3 oddc54(10) = 7 oddc54(20) = 9 oddc54(30) = 11 oddc54(50) = 21
のように表示せよ。(以下に main 関数のテンプレートを掲載する。)
int 型の配列 v を受け取り、
v[0] から v[i] までの和が 0 以上となるような最後の添字 \(i\) を返す関数
int findLast(const int v[]) を定義せよ。
ただし、この関数は引数として配列の要素数を受け取らず、配列にヘッダー limits.h
に定義されているマクロ INT_MIN に等しい要素が現れたら、
その直前の要素を配列の最後の有効な要素と見なす。
main 関数は以下のコードを利用して、確認せよ。
この場合、プログラムは、
findLast(vx) = 5 です。 findLast(vy) = 7 です。 findLast(vz) = -1 です。 findLast(vw) = -1 です。
と出力する。
整数 \(n\) を引数として受け取って、\( 1 \le x < y < n ^ 2 \) を満たす
整数の組 (x, y) で \(2 x + y \) が 7 で割って 2 余るもののリストを返す関数
chome をリスト内包表記を使って Python で定義せよ。(
余りを求める演算子は Python でも「%」である。)
例えば、chome(3) は [(1, 7), (2, 5), (4, 8), (5, 6)] を、
chome(5) は [(1, 7), (1, 14), (1, 21), (2, 5), (2, 12), (2, 19), (3, 10), (3, 17), (3, 24), (4, 8), (4, 15), (4, 22), (5, 6), (5, 13), (5, 20), (6, 11), (6, 18), (7, 9), (7, 16), (7, 23), (8, 14), (8, 21), (9, 12), (9, 19), (10, 17), (10, 24), (11, 15), (11, 22), (12, 13), (12, 20), (13, 18), (14, 16), (14, 23), (15, 21), (16, 19), (17, 24), (18, 22), (19, 20), (21, 23)]
を返す。