該当のソースコード
C言語
#include <stdio.h> int main(void){ int n; int a[200000]; int count[200000]; scanf("%d",&n ); for (int i = 1; i < n; i++) { scanf("%d", &a[i] ); count[a[i]]++; } for ( int i = 1; i <= n; i++) { printf("%d\n", count[i] ); } return 0; }
現在、C言語を勉強中の初心者です。初歩的な質問かもしれませんがお手柔らかにお願いします。
以下のような問題を解いているのですが、上のプログラムを実行するとscanfのfor文がなぜか1回多く繰り返してしまいます。
例えばn=5とすると、4回だけ繰り返すように書いてるつもりですが、実行すると5回繰り返されてしまいます。
調べてもどうしてもわからないため、なぜ1回多く繰り返されるのか教えて下さい。
問題文
N人の社員からなる会社があり、各社員には1,...,N の社員番号が割り当てられています。
社員番号 1の社員以外の全ての社員には、自分より社員番号が小さい直属の上司がちょうど1人います。
XさんがYさんの直属の上司であるとき、YさんはXさんの直属の部下であるといいます。
社員番号iの社員の直属の上司の社員番号がAiであることが与えられます。各社員について直属の部下が何人いるか求めてください。
制約
2≤N≤2×10^5
1≤Ai<i
回答3件
あなたの回答
tips
プレビュー