
#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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語において、 配列要素をひ...
-
c言語
-
関数から配列を返すには?
-
コンボボックスでデフォルト値...
-
C言語 配列の長さの上限
-
C++で、メンバもヒープに確保さ...
-
ポインタに ~0を入れること
-
x64環境で連続4GB以上のメモリ...
-
vbでDataTableの抽出コピー
-
VBを2008を用いてCSVを取り込む...
-
Visual Basic 6.0 と8.0と2015
-
配列を返り値、でエラー
-
9枚の写真がA4 1枚に印刷できま...
-
PHP MySQL自動連番で削除された...
-
aspでユーザー定義の構造体を作...
-
配列で格納したものをmsgboxで...
-
【速いブラインドタッチ】手を...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
RGB値を画像(PNG・BMPJPEGなど)...
-
関数のパラメタ(C++)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
c言語
-
c言語プログラミング 等差数列...
-
define で 配列
-
配列の要素数に変数を入れたい...
-
C言語 ファイルの指定された行...
-
int i, int i[1];
-
C#で構造体の配列を持った構造...
-
C言語において、 配列要素をひ...
-
C言語から質問です。
-
C#でのフィボナッチ数列
-
c言語 構造体
-
MFC - ダイアログボックスのPic...
-
構造体のextern方法
-
fclose()でセグメンテーション違反
-
C言語の課題が出たのですが自力...
-
2番目の最大値を求める
-
MFCのCArrayを使った二次元配列
-
const で宣言してるのに、値が...
-
配列の不正アクセスについて
おすすめ情報