数列の問題について
以下の数列の問題が上手に解けません、応用問題でまたもや壁が。
自分にとって魔の領域たる分野の助力をお願いします。
「自然数 N, M と N 個の自然数からなる数列 A と M 個の自然数からなる数列 B があるとき、
1 行目には数列 A の最初の B_1 個の値を出力し、 2 行目にはその次から B_2 個の値を出力。
数列 A の値を B_1 個、B_2個、... B_M 個で分割し、それぞれの数列を出力せよ。」
今回はきちんと図を書いてみました、御指摘とテキストに則ってこう表します。
int n = 8;
int m = 3;
int[] a = new int[]{1,2,3,4,5,6,7,8};
int[] b = new int[]{2,5,1};
for (int i = 0; i < 3; i++) {
}
int ans = 0;
for (int x : b) {
for (int i = 0; i < x; i++) {
System.out.print(a[ans]);
if (i < x - 1) {
System.out.print(" ");
} else {
System.out.println();
}
ans = 1;
}
}
}}
内容が内容だけに難しくて1つずつ確認するようにします。
int[] aが1~8まででnも8つ、int[] bが2,5,1の範囲でmが3つ。
すぐ以下のfor内に3を代入、標準入力ではないのでsc文は必要なし。
そして宿命たるans初期化ですが、今回必要ですよね?
別問題で出た命題を数列内に入れる方法でAの中にansを代入。
一旦a[ans]と表示、ここもOKですか?
終盤は0番目を引くためにi番目内のxから1つ引く・・・3行の内2行下げ。
ここが揺らぎやすく自信ないですが、前問で要素は0から始まるんじゃと
教わってきて比較間違えるなと指摘されて・・・番数から引くのか足すのか。
でも足したら位置がズレるからおかしいはず。最後はans有判定の1で終える。
“ ”は間隔空けてansの別枠に入れると学んで書いて、
ifは条件として出し抜くために書くはずでこうしました。
答えは
12
34567
8
となるはずですが、
12
22222
2
となってしまいます。いわゆる数字が順列できていなくて、3から認識されて
いないと思います。{ }の配置がおかしいのか、ヒントが見つからずに
まだどこかに穴があるというのか・・・もう頭痛い。
未熟者なのは理解できていますが、無理なのはやっぱり無理で。
javaがこんなに難しいなんて正直思っていなかったので。
どうすればこんな問題が作れるのか、だからといって引き下がるわけにもいかず。
是非、神の啓示をお願いしたいです・・・。