lowkeypug
@lowkeypug

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

C++ AtCoder初級問題

解決したいこと

AtCoderのC++の初心者向けの問題に取り組んでいます。
論理エラーが修正できず困っています。

発生している問題・エラー

4桁の正整数Nが与えられ、同じ数字が3つ以上並んでいるかどうかを判定し、並んでいればYes、そうでなければNoを出力するという問題です。
例)1111,1112,1222などはYes、1234,1211などはNo

image.png

該当するソースコード

#include <bits/stdc++.h>
using namespace std;

int main() {
  
  int N, a, b, c, d ;
  cin >> N ;
  
  a = N / 1000 ;
  b = N % 1000 / 100 ;
  c = N % 100 / 10 ;
  d = N % 10 ;

  if( a==b==c || b==c==d ){
    cout << "Yes" << endl ;
  }
  else{
    cout << "No" << endl ;
  }
  
 // cout << a << b << c << d ;
  
}

自分で試したこと

abcdが1~4桁目の数字になるように定義しています。最後にそれぞれを変数で出力し、各桁の数字が正しく代入されていることを確認しました。

その他

この問題,解答のリンクです。(https://atcoder.jp/contests/abc079/submissions/62178169)
このガイドで習った範囲で解きたいので、解法は大きく変えずに教えていただきたいです。
プログラミング,サイトでの投稿ともに経験が少ないので不備や失礼があれば申し訳ないです。
ご回答よろしくお願いします

0

2Answer

C++でa==b==cと書いても、a,b,cがすべて等しい、という意味にはなりません。
a==b==cは、(a==b)==cという意味となり、a==bの結果(trueかfalse)とcが等しいかを判定する、という意味になってしまいます。
a,b,cがすべて等しいかどうか判定したいのであれば、a==b && b==cと書いてください。

2Like

Comments

  1. @lowkeypug

    Questioner

    解決しました、丁寧にありがとうございます!!

  2. 解決したのであれば、本問をクローズしましょう。

Comments

  1. @lowkeypug

    Questioner

    めんどくさがった意識はなかったのですが使い方をちゃんと理解できてませんでした🤦‍♂️
    いい記事でした、ありがとうございました!

Your answer might help someone💌