- ベストアンサー
c言語プログラム
構造体xの中にint型のy[10]という配列があり、1と0でその添え字の番号が存在しているか判断して、すべてを足して1になるとその添え字の数字を決定するプログラムを作っているのですが、 添え字の求め方がわかりません・・。プログラムを教えてください。 わかりにくい説明で申し訳ないです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
・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である }
その他の回答 (5)
- ellipt01
- ベストアンサー率0% (0/2)
あぁだめだめ、何やってるんだか・・・お恥ずかしい(大汗 No.3ですがこれじゃ駄目ですね。成功してたらindexは9になっちゃう。 No.5の方の様にしてください。No.5の方のでも失敗してたらindexに正しい値は 入りませんが、失敗してるのでそれを参照する事はないでしょうからnpです。
お礼
回答ありがとうございます(^^♪
- asuncion
- ベストアンサー率33% (2127/6290)
>最終的に1が一つだけ残る予定です。 どういう内部処理で、1が1個だけ残るようになるのですか? たぶん、ここがいちばん肝心な点だと思います。
お礼
すみません(+_+) 回答ありがとうございます!
- ellipt01
- ベストアンサー率0% (0/2)
例えばこんな単純なものでもいいのではないでしょうか? 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の値を参照する必要が無くなります。
お礼
回答ありがとうございますm(__)m
- OKWavex
- ベストアンサー率22% (1222/5383)
>y[10]は最初、すべて1で初期化しています。 なかみが全部1なら1つ参照した時点で足す前にすでに1 >最終的に1が一つだけ残る予定です。 なにをやって「最終」なのか不明。最初からすべて1なら最後まですべて1 >for文ですべて足して、1になると成功ということで、その場所を知りたいのです。 すべて足したら10になるだけ
お礼
回答ありがとうございます。説明不足ですみません。
- asuncion
- ベストアンサー率33% (2127/6290)
データの中身と、それに対応する実行結果の具体例を提示していただけますか?
お礼
回答ありがとうございました!
補足
y[10]は最初、すべて1で初期化しています。最終的に1が一つだけ残る予定です。for文ですべて足して、1になると成功ということで、その場所を知りたいのです。説明が下手ですみません。。
お礼
納得できました!ありがとうございます!