#include <stdio.h>
int main(void)
{
int i[10],j,k,match;
printf("10個の数字を入力してください:\n");
for(j=0;j<10;j++) scanf("%d",&i[j]);
// 一致する数字があるかどうか調べる //
for(j=0;j<10;j++){
match=i[j];
for(k=j+1;k<10;k++)
if(match==i[k])
printf("%dが重複しています\n",match);
}
return 0;
}
このコードなのですが、一致する数字があるかどうか調べているところの、
for(k=j+1;k<10;k++)
このコードの内容が理解できません。
特にkの初期値が k=j+1 になっているのはなぜなのでしょうか?
配列i[j]には1から9までの数値が格納されているので、それと一致する数値を見つけ出すには
for(k=0;k<10;k++)
と同じことをすればよいのではないでしょうか?
アルゴリズムがどうしても分かりません。
どなたか教えてくださる方がいたらよろしくお願いします。
No.2ベストアンサー
- 回答日時:
i[j]は比較元、i[k]は比較先だからです。
j=0のときi[0]と重複する数字があるかどうか調べるための比較先はi[1]~i[9]ですよね。
だからkはj+1~9でないと成り立ちません。
hisa_a10さんが考えている
for(k=0;k<10;k++)
にしてしまうと、j==kというループ回のときに比較元と比較先が同一になってしまって、全て重複ありという解答になってしまいます。
これ、初心者が結構陥りやすいバグの元だったりします。
回答していただいてありがとうございます。
おかげさまで理解することができました。
i[j]と重複する数値を調べるにはi[j]自身以外の数値と比較すればいい、つまりi[j]に1を足した数値から比較していけばいいということですね。
またお世話になるときがあったら、その時はよろしくお願いします。
No.3
- 回答日時:
jとkで表を作って考えれば一目でわかります。
j=kは絶対に同じ値なので飛ばさなくてはならないし、たとえばj=2、k=3を調べたらj=3、k=2は必要ありません。
0123456789
0×○○○○○○○○○
1××○○○○○○○○
2×××○○○○○○○
3××××○○○○○○
4×××××○○○○○
5××××××○○○○
6×××××××○○○
7××××××××○○
8×××××××××○
9××××××××××
○のところだけ調べればいいので、ご質問のプログラムは正しいわけです。
回答していただいてありがとうございます。
記載していただいた表を見てすぐに理解することができました。
j=k以外の数値を比較対象にすればいいというわけですね。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
C言語において、 配列要素をひ...
-
MFC - ダイアログボックスのPic...
-
c言語
-
callocで二次元配列を作成する...
-
2番目の最大値を求める
-
配列の要素数に変数を入れたい...
-
c言語 構造体
-
C言語 構造体でつまずいています
-
C言語の2次元配列 容量が大き...
-
C言語から質問です。
-
char型配列をint型に代入するには
-
C言語で重複組合せを全列挙
-
C言語の課題丸投げ
-
fclose()でセグメンテーション違反
-
char gyou[1024];でcharの表現...
-
5人分の氏名と英語、国語、数...
-
C言語入門者です。アドレス演算...
-
ファイルのデータを構造体に代...
-
エラー:浮動小数点の不正な使用
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
define で 配列
-
c言語
-
C#で構造体の配列を持った構造...
-
構造体のextern方法
-
C言語において、 配列要素をひ...
-
C#でのフィボナッチ数列
-
C言語の2次元配列 容量が大き...
-
C#で配列が空かを判定するには?
-
配列のアドレス部
-
char型配列をint型に代入するには
-
C言語の課題が出たのですが自力...
-
2番目の最大値を求める
-
C言語についてです 5人のテスト...
-
C言語から質問です。
-
C言語 ファイルの指定された行...
-
c言語 構造体
-
コンボボックスでデフォルト値...
-
MFCのCArrayを使った二次元配列
おすすめ情報