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

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

新規登録して質問してみよう
ただいま回答率
85.48%
変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Q&A

解決済

2回答

617閲覧

変数宣言の位置でコードの挙動が異なる原因

ALPHABET_

総合スコア2

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

0グッド

0クリップ

投稿2022/04/18 02:43

ABC232-B Caesar Cipher(https://atcoder.jp/contests/abc232/tasks/abc232_b)
にて、自分の提出したコードが通らず、模範解答を参考にstringの宣言部分をループ内に入れたらACになったのですが、なぜ最初自分が提出したコードが弾かれてループ内に入れたらACになるのでしょうか...?
コードの概要は以下で、開発環境はAtCoderのコードテストです。
初心者の質問で申し訳ないのですが、お願いします。

C++

1#include <bits/stdc++.h> 2#include <string> 3#define _GLIBCXX_DEBUG 4#define rep(i, n) for (int i = 0; i < (int)(n); i++) 5 6using namespace std; 7 8int main(){ 9 string s,t; 10 cin>>s>>t; 11 bool flag=false; 12 //string m=s; ここで宣言をしたらWA 13 rep(k,26){ 14 //string m=s; ここで宣言をしたらAC 15 rep(i,s.size()){ 16 m.at(i)='a'+(m.at(i)+k)%26; 17 } 18 if(t==m) 19 flag=true; 20 } 21 if(flag) 22 cout<<"Yes"<<endl; 23 else 24 cout<<"No"<<endl; 25 26}

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

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

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

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

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

guest

回答2

0

ベストアンサー

正解が「kが2のときにt==mになる」だとすると、ループ外で m を宣言した場合、

  • kが1のとき、ms の各文字に 1 を足したものになる。
  • kが2のとき、m は ↑の結果にさらに 2 を足したものになる。つまり、s の各文字に 3 を足したものになる。
  • よって、kが2のときに t==m にならない

と、間違った結果になります。

投稿2022/04/18 02:59

int32_t

総合スコア20882

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

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

ALPHABET_

2022/04/19 01:36

具体的な説明ありがとうございます、わかりやすかったのでBAにさせて頂きました!
guest

0

宣言の位置は関係ないです。いつ代入するかによる違いです。

C++

1 bool flag=false; 2 string m; // 宣言 3 m=s; // 代入 4 rep(k,26){ 5 rep(i,s.size()){

と、

C++

1 bool flag=false; 2 string m; // 宣言 3 rep(k,26){ 4 m=s; // 代入 5 rep(i,s.size()){

という違う処理なので、結果も違います。

投稿2022/04/18 03:14

otn

総合スコア84555

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問