ページ 11

+=と==について

Posted: 2021年4月17日(土) 10:46
by 03life
atcoderのPlacing marblesという問題についての質問です。
https://atcoder.jp/contests/abs/tasks/abc081_a

この回答をみてみると
----------------------------------
#include <stdio.h>

int main(void)
{
char s[3];
int x = 0,i;

scanf("%s",s);

for(i = 0;i < 3;i++) {
x += s == '1';
}

printf("%d",x);

return 0;
}
-----------------------------------
なのですが、
for(i = 0;i < 3;i++) {
x += s == '1';
}
ここ(x += s == '1';)の意味を教えていただきたいです。

僕は、s[1]のとき1なら xに1加算して次はs[2]を評価するのだと思いました。
なぜこの書き方なのか、ifを使わなくても条件をつけることができるのか疑問です。

説明が下手で申し訳ないのですがどうかよろしくお願いいたします。

Re: +=と==について

Posted: 2021年4月17日(土) 10:55
by 03life
forのなかのsのあとには []がつきます。
なぜか消えていました
https://gyazo.com/d980cdd2d4bcd3cf78bc19d4cba66aad

Re: +=と==について

Posted: 2021年4月17日(土) 13:35
by みけCAT
03life さんが書きました:
4年前
ここ(x += s[​i] == '1';)の意味を教えていただきたいです。
==演算子は、両辺を比較し、等しければ1、等しくなければ0という結果になります。
この比較結果の値を、+=演算子によってxに加えています。
03life さんが書きました:
4年前
forのなかのsのあとには []がつきます。
なぜか消えていました
[​/i]が無くても、[​i]は斜体タグと認識されてしまいます。
ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。

※この記事内の[​i]は、U+200Bを挟むことでタグとしての認識を回避しています

Re: +=と==について

Posted: 2021年4月17日(土) 15:38
by box

コード:

x += s[i] == '1';
は、次のifi文と同じ意味を持ちます。

コード:

if (s[i] == '1') {
    x += 1;
}

Re: +=と==について

Posted: 2021年4月17日(土) 16:16
by 03life
みけCAT さんが書きました:
4年前
03life さんが書きました:
4年前
ここ(x += s[​i] == '1';)の意味を教えていただきたいです。
==演算子は、両辺を比較し、等しければ1、等しくなければ0という結果になります。
この比較結果の値を、+=演算子によってxに加えています。
03life さんが書きました:
4年前
forのなかのsのあとには []がつきます。
なぜか消えていました
[​/i]が無くても、[​i]は斜体タグと認識されてしまいます。
ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。

※この記事内の[​i]は、U+200Bを挟むことでタグとしての認識を回避しています
ありがとうございます!納得しました。
タグの件了解しました。

Re: +=と==について

Posted: 2021年4月17日(土) 16:16
by 03life
box さんが書きました:
4年前

コード:

x += s[i] == '1';
は、次のifi文と同じ意味を持ちます。

コード:

if (s[i] == '1') {
    x += 1;
}
ありがとうございます!
ifと同じ意味で使えることを覚えておきます!!