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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

233閲覧

5桁の整数のうち回文となっているものを、指定した整数a以上整数b以下から見つける

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/05/08 07:47

前提・実現したいこと

この問題を解きたい。
https://beta.atcoder.jp/contests/abc090/tasks/abc090_b

発生している問題・エラーメッセージ

例えばa=31415, b=92654のとき、例では612となっているが
僕のを実行すると169になる。
エラーメッセージ

### 該当のソースコード ```ここに言語名を入力 #include<stdio.h> int main(void){ int num[5]={0}; int a=0, b=0; int i=0, j=0, n=0, cnt=0; int flag=0; scanf("%d %d", &a, &b); //nの各桁を配列に格納する for(i=a; i<=b; i++){ n=i; for(j=0; j<5; j++){ num[j]=n%10; n=n/10; } //回文になる3つのパターンと比較する。一致したときflag=1にすることで、判定回数を //削る。ちなみにcase1は*****と**@**を兼ねている。 for(j=1; j<=3;j++){ flag=0; switch(j){ case 1: if(num[0]==num[1] && num[1]==num[3] && num[3]==num[4]){ cnt=cnt+1; flag=1; } break; case 2://*@*@*の回文パターン if(num[0]==num[2] && num[2]==num[4] && num[1]==num[3]){ cnt=cnt+1; flag=1; } break; case 3://*@@@*の回文パターン if(num[0]==num[4] && num[1]==num[2] && num[2]==num[3]){ cnt=cnt+1; flag=1; } break; default: break; } if(flag==1) break; } } return 0; }

試したこと

一番外側のループの回数を数える
→(b-a+1)回行われてました(正しい回数です)。

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

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

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

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

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

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

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

zvub1123

2018/05/08 07:56

ちょっと読みづらいので、ソースコードの表示を直して欲しいです
guest

回答3

0

ベストアンサー

検出しているバターンが不足していませんか?
34543のようなパターンが漏れているように思います。
そもそも、回文かどうかを判定したいのであれば、先頭の文字と最後の文字を比較して、同じであればその内側を比較するだけでよくて、先頭から1文字目と2文字目が同じ場合などに分ける必要はないはずです。
5文字限定でいいのであれば、1文字目と5文字目が同じ、2文字目と4文字目が同じという条件を満たせばいいはずです。

投稿2018/05/08 08:05

編集2018/05/08 08:06
m-take

総合スコア249

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

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

退会済みユーザー

退会済みユーザー

2018/05/08 08:28

外から内に向かって判定したほうが速いですね、ありがとうございます!!
guest

0

「12321」のようなパターンが抜けています。

そして、根本的な問題ですが、奇数桁なので、真ん中の値は何であっても条件を満たします。よって、比較する必要もありません。

投稿2018/05/08 08:04

編集2018/05/08 08:04
maisumakun

総合スコア145121

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

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

退会済みユーザー

退会済みユーザー

2018/05/08 08:08

case2の[2]を任意にして(判定で指定しないで)case3を無くせばってことですよね、ありがとうございます!
guest

0

*@%@* の回文パターンのチェックが抜けていると思います。

投稿2018/05/08 08:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/05/08 08:04

ありがとうございます!全然気づかなかった。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問