前提
AtCoderの問題(下)での質問です。
「 ABC 081 A - Placing Marbles (100 点)
0 と 1 のみから成る 3 桁の番号 s が与えられます。1 が何個含まれるかを求めてください。」
でfor文を使って問題を解こうとしてわからないところがありました。
int main(void){ int N; int s[10]; int ans=0; cin>>N; for(int i=1;i<N;++i) cin>>s[i]; for(int i=1;i<N;++i){ if(s[i]==1){ ans+=1; } } cout<<ans<<endl; }
というコードを作って
入力は
3
101
と入れたら
出力が0になってしまいます。
実現したいのは
1の数だけ数えたいです。今回の例だと”101”と1が2つあるので2と出力したいです。
どこが間違っているのかが分かりません。
ご教授お願いします。
補足情報(FW/ツールのバージョンなど)
C++
ここにより詳細な情報を記載してください。
提示コードはコンパイルエラーが発生します(d[i]とは?)。
また問題文とコードに相違があるようですが意図通りでしょうか(Nとは?)
一つ目。そもそもコンパイルエラーになるし、インデントも汚いです。
二つ目。問題文では「1,2,3 の番号がついた 3 つのマスからなるマス目を持っています」と「3マスであること」を明示されているのになぜかコードではint s[10];のように要素数10で確保している。これ必要ですか?
三つ目。問題文が省略されているためわかりづらいです。AtCoderの番号等が書かれているため探すことは可能ですが、この手の問題だと「そもそも回答を公開したり質問したりすることを禁じている」場合があります。Paizaスキルチェックはまさにそうです。AtCoderでも出題されて24時間だったか…は同じく質問することも禁じられているようです。
四つ目。入力値とコードでの入力部のあれが合わないです。
五つ目。デバッグぐらいはしましょう。デバッグのやり方は確かに初心者にはハードルが高いですが、ほぼ必須の能力です。
六つ目。データ型を理解しましょう。int型とか。

回答4件
あなたの回答
tips
プレビュー