• ベストアンサー

c言語プログラム

構造体xの中にint型のy[10]という配列があり、1と0でその添え字の番号が存在しているか判断して、すべてを足して1になるとその添え字の数字を決定するプログラムを作っているのですが、 添え字の求め方がわかりません・・。プログラムを教えてください。 わかりにくい説明で申し訳ないです。

質問者が選んだベストアンサー

  • ベストアンサー
  • luka3
  • ベストアンサー率72% (453/623)
回答No.5

・x.y[10]の配列があり0か1が入っている ・このうち1が入っている場所が1つだけの時、その位置を知りたい という解釈でいくとこうなります。 int i, index, sum=0; for (i=0; i<10; i++) { sum += x.y[i]; ※y[10]の合計を求めます if (x.y[i] == 1) index = i; ※y[10]の内1が入っていればその添え字を記憶 } if (sum == 1) { ※ここに来たとき x.y[index] だけが1である }

noname#193530
質問者

お礼

納得できました!ありがとうございます!

その他の回答 (5)

  • ellipt01
  • ベストアンサー率0% (0/2)
回答No.6

あぁだめだめ、何やってるんだか・・・お恥ずかしい(大汗 No.3ですがこれじゃ駄目ですね。成功してたらindexは9になっちゃう。 No.5の方の様にしてください。No.5の方のでも失敗してたらindexに正しい値は 入りませんが、失敗してるのでそれを参照する事はないでしょうからnpです。

noname#193530
質問者

お礼

回答ありがとうございます(^^♪

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.4

>最終的に1が一つだけ残る予定です。 どういう内部処理で、1が1個だけ残るようになるのですか? たぶん、ここがいちばん肝心な点だと思います。

noname#193530
質問者

お礼

すみません(+_+) 回答ありがとうございます!

  • ellipt01
  • ベストアンサー率0% (0/2)
回答No.3

例えばこんな単純なものでもいいのではないでしょうか? int index = -1; // これに御所望の添え字が記憶されます。 int sum; for (i=0, sum = 0; i < 10; i++) {  sum += y[i];  if (sum == 1) index = i; } if (sum == 1) 成功 else 失敗 sum が1ではない(ご希望の条件が満たされない)時はindexの値は意味を持たなくなりますが、そもそも条件が満たされていないのでindexの値を参照する必要が無くなります。

noname#193530
質問者

お礼

回答ありがとうございますm(__)m

  • OKWavex
  • ベストアンサー率22% (1222/5383)
回答No.2

>y[10]は最初、すべて1で初期化しています。 なかみが全部1なら1つ参照した時点で足す前にすでに1 >最終的に1が一つだけ残る予定です。 なにをやって「最終」なのか不明。最初からすべて1なら最後まですべて1 >for文ですべて足して、1になると成功ということで、その場所を知りたいのです。 すべて足したら10になるだけ

noname#193530
質問者

お礼

回答ありがとうございます。説明不足ですみません。

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

データの中身と、それに対応する実行結果の具体例を提示していただけますか?

noname#193530
質問者

お礼

回答ありがとうございました!

noname#193530
質問者

補足

y[10]は最初、すべて1で初期化しています。最終的に1が一つだけ残る予定です。for文ですべて足して、1になると成功ということで、その場所を知りたいのです。説明が下手ですみません。。