質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

993閲覧

for文を使っての狙った出力にならない

jaogjig

総合スコア21

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2023/01/16 04:47

編集2023/01/16 05:27

前提

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; }

というコードを作って
入力は

101
と入れたら
出力が0になってしまいます。
実現したいのは
1の数だけ数えたいです。今回の例だと”101”と1が2つあるので2と出力したいです。
どこが間違っているのかが分かりません。
ご教授お願いします。

補足情報(FW/ツールのバージョンなど)

C++
ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2023/01/16 04:56

提示のコードでコンパイルできたのですか。
int32_t

2023/01/16 04:56

人にコードを見せるときはインデントをきちんとしていただけると読みやすいです。
can110

2023/01/16 04:58

提示コードはコンパイルエラーが発生します(d[i]とは?)。 また問題文とコードに相違があるようですが意図通りでしょうか(Nとは?)
BeatStar

2023/01/16 05:10

一つ目。そもそもコンパイルエラーになるし、インデントも汚いです。 二つ目。問題文では「1,2,3 の番号がついた 3 つのマスからなるマス目を持っています」と「3マスであること」を明示されているのになぜかコードではint s[10];のように要素数10で確保している。これ必要ですか? 三つ目。問題文が省略されているためわかりづらいです。AtCoderの番号等が書かれているため探すことは可能ですが、この手の問題だと「そもそも回答を公開したり質問したりすることを禁じている」場合があります。Paizaスキルチェックはまさにそうです。AtCoderでも出題されて24時間だったか…は同じく質問することも禁じられているようです。 四つ目。入力値とコードでの入力部のあれが合わないです。 五つ目。デバッグぐらいはしましょう。デバッグのやり方は確かに初心者にはハードルが高いですが、ほぼ必須の能力です。 六つ目。データ型を理解しましょう。int型とか。
guest

回答4

0

自己解決

みなさんフィードバックありがとうございました。
int main(void){
int s[3];
int ans=0;
for(int i=0;i<3;++i) cin>>s[i];
for(int i=0;i<3;++i){
if(s[i]==1){
ans+=1;
}
}
cout<<ans<<endl;
}
上のコードでできました。
入力
1
0
1
出力

投稿2023/01/16 05:54

jaogjig

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2023/01/16 08:00

質問本文では、 ``` 3 101 ``` という入力値で、本来の問題の入力値は ``` 101 ``` で、この自己解決では ``` 1 0 1 ``` という入力値となっています。それはルール違反ですよ。 そもそも仕様にないことを勝手にやっているのですから。
fana

2023/01/16 09:56

変に考えずに,単純に char c; for( int i=0; i<3; ++i ){ std::cin>>c; if(c=='1')++ans; } とかで良いのでは.
Zuishin

2023/01/17 01:08

AtCoder の出力例を取得して自動的にテストするようなツールがあったような気がします。 インデントの乱れからもちゃんとした編集ツールを使っていないことがわかりますし、そんな雑なやり方では学習効率も低いでしょう。 ただしいコードができたかどうかは自分で判断するのではなくツールを使ってチェックしましょう。
jaogjig

2023/01/17 09:07

了解しました。 環境構築中でまず先にAtCoderを始めたかったので、とりあえずの編集ツールを使っていました。 環境構築頑張ります。
guest

0

if(d[i]==1){

dという名前の配列は定義されてません

投稿2023/01/16 04:57

y_waiwai

総合スコア88163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

一箇所だけd[i]になっているから

投稿2023/01/16 04:57

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

  • 配列のインデックスは0始まりです。i=1;i<NではN-1回しか回りません。
  • 謎の配列dがいきなり登場しています。コンパイルすら通りません。たぶんsと打ち間違えてます。
  • というか問題に存在しない謎の入力Nがあることになっています。問題をよく読みましょう。

投稿2023/01/16 04:55

編集2023/01/16 05:01
ozwk

総合スコア13553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問