ベストアンサー ※ ChatGPTを利用し、要約された質問です(原文:組み合わせに関するC言語プログラム) C言語プログラムで組み合わせを特定する方法 2010/11/20 15:32 このQ&Aのポイント C言語プログラムで集合Aと集合Bの要素の組み合わせを特定する方法について学びます。集合Aは集合Bの部分集合であり、同じラベルの要素のIDを特定します。具体的な組み合わせの例として、集合Aのラベルと集合BのIDを使用して4通りの組み合わせを特定します。 組み合わせに関するC言語プログラム 各要素がラベルとIDを持つ集合を考えます。 4つの要素があるAという集合と、7つの要素があるBという集合から、ラベルが同じもののIDを特定するプログラムを考えています。AはBの部分集合です。Aに対応するラベルのBのIDを特定します。 各要素のラベルとそのIDは次のようなイメージです。 集合A: ラベル{1,2,2,5} ID{2,3,1,0} 集合B: ラベル{1,1,2,2,3,4,5} ID{2,3,1,6,4,0,5} この場合、私が欲しいIDの組み合わせは、 {2,1,6,5}、{2,6,1,5}、{3,1,6,5}、{3,6,1,5} の4通りとなります。 ちょっと、どのように考えてプログラムを組めば良いのか思いつかないので、 プログラムの流れやイメージをご教授ください。よろしくお願いします。 質問の原文を閉じる 質問の原文を表示する みんなの回答 (2) 専門家の回答 質問者が選んだベストアンサー ベストアンサー sweet76 ベストアンサー率39% (584/1497) 2010/11/20 17:05 回答No.1 自分がその2つのデータを与えられたとして、実際どうやって、欲しいIDを取りだすか、紙の上でやってみればいいんです。 その手順を、同じ処理を繰り返していればループ文に置き換えられるし、比較していればifや比較の関数に置き換えられるでしょう。 場合分けが必要なら、caseに置き換えてもいいし。 そうするとデータを何に格納しておくと楽かも決まる。 というのが、一般的かどうかはわかりませんが、私が、すぐにプログラムとして思いつかないときのやり方です。 プログラムかいちゃえば答えは出るけど、書き方は一つじゃないし、学校の課題とかだったら嫌ので考え方のみですが。 質問者 お礼 2010/11/21 15:23 なんとか出来ました! ありがとうございました。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 その他の回答 (1) asuncion ベストアンサー率33% (2127/6290) 2010/11/20 17:42 回答No.2 >集合A: >ID{2,3,1,0} これは必要なんでしょうか? ラベルさえあればいいような気もするんですけど…。 質問者 補足 2010/11/21 11:44 このIDを使って、やりたいことがあるのでどうしても必要なのです。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発C・C++・C# 関連するQ&A 【組合せ】1:2の作表 添付画像は分かりにくいので文字で説明しますが、 二項対立の表で対応した組合せから、さらに同じ要素の組み合わせで3通りの組み合わせを作りたいのです。 たとえばX軸=AとY軸=Bと対応したマトリックス部分を(1)とする。(表1) 表1で対応したものと同じ要素(A~E)でさらに対応させる。(表2) しかし重複部分を探すのに難儀しています。 表1は斜線を境に同じ組み合わせが対立していますが、表2の場合も法則を使い探したいのですが… 数学の「組み合わせ」を求めるプログラム お世話になっています。 早速ですが、数学の「組み合わせ」を求めるプログラムを作成中です。 例えば、1~6の数字の中から4個取り出す場合、パターンとしては、 (1,2,3,4) (1,2,3,5) (1,2,3,6) (1,2,4,5) (1,2,4,6) (1,2,5,6) (1,3,4,5) (1,3,4,6) (1,3,5,6) (1,4,5,6) (2,3,4,5) (2,3,4,6) (2,3,5,6) (2,4,5,6) (3,4,5,6) の15パターンが挙げられます。 「1~aの数字の中からb個取り出す」場合、上記の例だとa=6、b=4ですが、 このようにa,bにそれぞれ値を与えると、上記のようにすべての組み合わせを 求めてくれるPHPプログラムを作成中です。 実現方法、ソースコードなど、ご教授いただけないでしょうか。 よろしくお願い申し上げます。 C言語での並び替えのプログラム A[6][5]={{"abei"}, {"aceh"}, {"adeg"}, {"aef"}, {"bcfi"}, {"bdfh"}}; と配列があるとします。 (a).A[1][5]の文字列とA[2][5]の文字列を比較して、"abceih"という組み合わせた文字列を作り、その文字列の数を出します(この場合6個)。次に、A[3][5]のA[4][5]を比較して組み合わせて文字列を作り、その文字列の数を出します。A[5][5]とA[6][5]も同じように比較して組み合わせて文字列を作り、その文字列の数を出し、最後にそのすべての数の和を出します。 (b).この配列を並べ変えて(a)をします。 並び替え方は配列6個のとき 1.(1)(2)(3)(4)(5)(6) 2.(1)(2)(3)(5)(4)(6) 3.(1)(2)(3)(6)(4)(5) 4.(1)(3)(2)(4)(5)(6) 5.(1)(3)(2)(5)(4)(6) 6.(1)(3)(2)(6)(4)(5) 7.(1)(4)(2)(3)(5)(6) 8.(1)(4)(2)(5)(3)(6) 9.(1)(4)(2)(6)(3)(5) 10.(1)(5)(2)(3)(4)(6) 11.(1)(5)(2)(4)(3)(6) 12.(1)(5)(2)(6)(3)(4) 13.(1)(6)(2)(3)(4)(5) 14.(1)(6)(2)(4)(3)(5) 15.(1)(6)(2)(5)(3)(4) の15通りになります。 この配列の並びを前から配列を2つずつ取り出して比較すれば全組み合わせが完了したことになります。 この15通りの組み合わせの中で総和が一番少なくなる組み合わせ方を探すプログラムを作りたいのです。 そしてこのとき、配列が最大で40個までとなることがあるとするとその並べ替えのプログラムはどうなるでしょうか? 比較するプログラムは作ることに成功しましたが並べ替えのプログラムがうまく作れません誰か教えていただけないでしょうか? ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム C言語のプログラムを作りました。 以下のプログラムは動くかどうか、確認して頂けませんか? おかしい部分があれば指摘して下さい。 また、自分で考えたのですが、このプログラムはどのように考えられたのか、作成方針は考えられますでしょうか? なぜ聞くかというと、皆さんが考えられるように自分も考えているのかどうか、作成方針を聞くことにより判断したいのです。 →作成方針を記述の上、プログラムについてご指摘の方、よろしくお願い致します。 #include<stdio.h> main() { int a,b,c; b=0; c=1; printf("a="); scanf("&d",&a); do{ c=c+1; b=a%c; }while(!(b==0)); if(c==a); printf("sosu-desu n); }else{ printf("sosu-denai n); } } C言語 このプログラムを作りたいのですが… ??????????? 物の総数を入れてください:12 取り出す物の数を入れてください:2 12個の異なる物から2個をを取り出す組み合わせの数は66です ?????????????? ここに出てくる数字は scanfで入れます。 だいたい こんな感じだと思うのですが… ***********の部分が わかりません。 ??????????????? #include<stdio.h> int factorial(int m,int r) { ************** } int main(void) {int a,b; printf("物の総数を入れてください:") scanf("%d",&a); printf("取り出す物の数を入れてください:") scanf("%d",&b); printf("12個の異なる物から2個を取り出す組み合わせの数は%dです。\n",a,b,factorial(a,b));) ?????????????? お願いします(>_<) 集合の問題 次の問題の解答をお願いします。 S={a,b,{a,b}}で、以下の関係が成り立つ場合は○、成り立たない場合は×を記入せよ。 (1){a,b}はSの部分集合である (2)aはSのべき集合の要素である (3)φはSの要素である (4){{a,b}}はSのべき集合の要素である (5){a,{b}}はSのべき集合の部分集合である (6){a,b}はSのべき集合の部分集合である (7){a,b}はSのべき集合の要素である (8)aはSの部分集合である (9)φはSのべき集合の部分集合である (10)φはSのべき集合の要素である (11){φ,{a}}はSの部分集合である (12){{a},{b}}はSのべき集合の要素である c言語のプログラムです 2つの生の整数の割り算a÷bはaからbを繰り返し引いていき、引くことが出来なくなるまでの回数を商、その時の残りを剰余をすることで、引き算だけを用いて実現することができる。このことを考慮して、while文と引き算だけを用いて割り算を実現しなさい。という問題なんですけどどのようにプログラムを作っていいやらわかりません 一様ヒントはあります ・変数としては、入力する二つの整数に対応する変数m,n、商に対応する変数q、剰余に対応する変数rを使うとよいでしょう。すべて整数ですのでintで宣言する。 皆さんのご協力お願いします 組み合わせのプログラム 組み合わせのプログラムを考えています。 例として tray[0]=1000, tray[1]=500, tray[2]=300 があるとします。 各配列の値を使って、その合計値が例えば「1000 以下」と言う条件に当てはまる組み合わせは 1000, 800(500+300), 500, 300, (0) です(各配列の値は1回だけ使用可能とします)。 1つの tray に対して、それを「足すか」「足さないか」の2通りが考えれるので、全体で2^n個(trayの数をnとする)の組み合わせを調べれば良いと思っています(これは間違っているのかな?!) プログラムのイメージは以下のような感じです。 int sum,x; (ここは x を使って if か for を使った足すか足さないかの条件ではないか!?){ sum=0; for(int i=0;i<n;i++){ sum+=tray[i]*x;//ここでさきほどの x を使うのではないか、x に 0 or 1 が入ってくるイメージです if(指定した数字(条件)>=sum) System.out.print("ここで組み合わせの出力"); } } 初歩的な質問でお恥ずかしいです。 意味的に、かなりはしょった部分があるので、言いたい意味が分からないなど、ご質問がある方はご遠慮なくして下さい。 色々頑張ってみたのですが無理でした、もしご解答いただける方がいればすごく助かります。 宜しくお願いします。 集合について。 Aを100以下の自然数の集合とする. また,50以下の自然数kに対し, Aの要素でその奇数の約数のうち最大のものが2k-1となるものからなる集合Akをとする. このとき,次の問いに答えよ. ①Akを求めよ. ②Aの各要素は, A1からA50までの50個の集合のうちのいずれか1つに属することを示せ. ③Aの部分集合Bが51個の要素からなるとき, y/xが整数となるようなBの異なる要素x.yが存在することを示せ. ④50個の要素からなるAの部分集合Cで, その中にy/xが整数となるような異なる要素x.yが 存在しないものを1つ求めよ.この問題をご教授頂けると幸いです。 このC言語プログラムでどこをいじればいいのか教えて下さい。 このC言語プログラムでどこをいじればいいのか教えて下さい。 //2 つの整数を入力し、和、差、積、商を計算し表示する。 #include<stdio.h> int main(void) { int a,b,wa,sa,seki,syou; scanf("%d %d",&a,&b); wa=a+b; sa=a-b; seki=a*b; syou=a/b; printf("%d+%d=%d\n",a,b,wa); printf("%d-%d=%d\n",a,b,sa); printf("%d*%d=%d\n",a,b,seki); printf("%d/%d=%d\n",a,b,syou); return (0); } これを繰り返し実行する形にしたいです。できれば今勉強中のwhileでお願いします。 また間違っている部分、指摘などありましたら宜しくお願いします。 大きな値をいれると足し算がダメになったり、割り算がおかしくなります。 また実数の時はどうなのかなど教えて下さい。 C言語プログラミングの質問です 対戦試合の組み合わせを求めるプログラムを作りたいんですが、 例えばA~Dのグループがあって、 一日に一試合として、各対戦相手と必ず一回はホームで勝負し、また以下の日程ではそのチームはホームで試合できない A:1,4日目 B:4,5日目 C:2日目 D:2,3,5日目 とすると、組み合わせ左に書いてあるチームがホームとすると(例:A-B C-D ならAとCがホーム) 1日目:B-A,D-C 2日目:A-C,B-D 3日目:A-D,B-C 4日目:D-A,C-B 5日目:A-B,C-D 6日目:C-A,D-B のように試合が組める。また日程はグループ数*2-2の日数で実現できる。 この場合に、グループ数が増えた場合にも対応した日程の組み方のアルゴリズムがおもいつきません。 どなたか詳しい方ご教授おねがいします C言語のプログラム作成について ●2つの整数a,bを入力し、aがbより大きいとき、aとbを入れ替える場合、どのようなプログラムを作成すればよいのでしょうか? ●aとbを入れ替えるには、入れ替え作業用の領域tempを使い、次の処理を行う。 a→temp, b→a, temp→b 【プログラム作成例】 a =>10 a=>10 b =>5 b=>20 a=5 b=10 a=10 b=20 上記のような問題の解答は下記のようになるのですが、下記以外の解答方法はありませんでしょうか? C言語に詳しい方、解答の方よろしくお願いします! #include <stdio.h> main() { int a,b,temp; /* データの入力 */ printf("a=>"); scanf("%d",&a); printf("b=>"); scanf("%d",&b); /* a>bのときにデータを入れ替える */ if(a>b){ temp = a; a = b; b = temp; } printf("a=%d b=%d\n",a, b); return (0); } AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム c言語のプログラムについて 今年からC言語を始めた大学1年生です。レポートで四則計算を行うプログラムを6/19までに作らないといけないです。使えるのは今までに習った選択型、反復型、関数scanfです。このプログラムの留意点は次の4つです。 1.使う演算を選択してもらう 例えば どんな演算をしますか? 1:+,2:-,3:*,4:/ (選択) 2.演算を行う数値を入力してもらう 例えば a + b の計算をします。aを入力してください。 3.演算結果を表示する ○+○の答えは ○です 4.計算終了か、それともほかの演算を行うか 決める 0:計算終了 1:他の計算を行う を選択してください 以下のプログラムはこのことを留意してプログラムをつくりました。どこがおかしいのでしょうか。 #include<stdio.h> main() { short a,b,m,n; long c,d,e,f; c = a + b; d = a - b; e = a * b; f = a / b; m = 1; printf("整数を入力してください:"); scanf("%d",&a); printf("どんな演算をしますか?:"); printf("1: +,2: -,3: ×,4: ÷ :"); scanf("%d",&n); while(m=1){ if(n<=4){ while(m=1){ switch (n<=4){ case 1: printf("整数を入力してください:"); scanf("%d",&b); printf("%d + %d = %d \n",a,b,c); break; case 2: printf("整数を入力してください:"); scanf("%d",&b); printf("%d - %d = %d \n",a,b,d); break; case 3: printf("整数を入力してください:"); scanf("%d",&b); printf("%d × %d = %d \n",a,b,e); break; case 4: printf("整数を入力してください:"); scanf("%d",&b); printf("%d ÷ %d = %d \n",a,b,f); break; } } } else { printf("計算できません。"); printf("演算をやり直してください。\n:"); } } printf("計算を終了しますか、それとも他の計算を行いますか?:"); printf("0:計算終了,1:他の計算を行う:"); scanf("%d",&m); printf("計算を終了します。\n"); } 提出期限があるのでなるべく早めのご回答待ってます。生意気言ってすいません。 組み合わせ生成プログラム はじめまして。以下のような組み合わせを生成したいと考えています。初心者なもので、どのように全く・・・です。 どのようなソフトやプログラムで出来るか途方にくれております。 よろしくお願いいたします。 1)A群:X個 B群:Y個 C群:Z個(毎回群数、X,Y,Zを可変させたい) からG個の組み合わせを生成する。 2)生成された組み合わせを別の組み合わせと重なるものを抽出する。 なにぶん、初心者なのでよろしくお願いいたします。 「組み合わせ」「序列」について 同じ質問をしたのですが説明が悪かったためもう一度。 「組み合わせ」「序列」についてです。 たとえばA~E5つの要素の中で重複しない可能な限りの組み合わせの公式を知りたいのです。 たとえばそれぞれ2組づつにすると、 (1)A×B (2)A×C (3)A×D (4)A×E (5)B×C (6)B×D (7)B×E (8)C×D (9)C×E (10)D×E という組み合わせになります。 今度はこの組み合わせをワンセットにし((1)のA×B)、再び、5つの要素と組み合わせるようにもしたいのです。 (1)×A (1)×B (1)×C ・ ・ ・ (2)×A (2)×B (2)×C ・ ・ ・ というように。 この公式と、A+Bの組み合わせでも順序はB+Aという並べ方(順列?)もありますよね。 以上の例について、組み合わせと順列、これらの公式を教えてください。 説明文がわかりずらければ補足致します。 なお当方、数学ならずとも算数すら苦手なので、お手柔らかなご指導をお願いします。 説明文がわかりずらければ補足致します。 配列について(C言語) 配列の要素において一番目の要素以外を0にするプログラムを以下のように作成したのですが(while文を*b != 0という条件で作りたい)、while文内のところが間違っているためだと思われるのですが、うまく実行されません(実行しても何も表示されない)。どのようにしたらいいのでしょうか。または、何かが抜けている、ほかの部分が間違っている等もあるためにうまく実行されないということなのでしょうか。 #include <stdio.h> int main(void) { int a[5] = {5, 78, 2, 9, 0}; int i, *b; b = &a[0]; while (*b != 0){ if(*!=a[0]) *ptr=0; else *ptr=a[0]; } for (i = 0; i < 5; i++){ printf("ptr値 =%d ptrアドレス =%p \n", *ptr, ptr); } printf("\n"); return (0); } 順列・重複 9個の要素をもつ集合{a1,a2・・・、a9}の部分集合の内、{a1,a9}を含む部分集合はいくつあるか?で、組合せnCrを使うと解ける(128個)のですが、解答解説では、〔a1,a9を除く要素の集合は部分集合は27個である。その各々と{a1,a9}の和集合が題意に適する〕と書いてあるのですが、意味が分かりません。わかりやすく集合図でもあればと思うのですが・・・?お願いします。 VBの組み合わせプログラムについて。 初めまして。複数部品からなる製品の組立途中の形状パターンを抽出する プログラムを作成しているのですが、良いループが組めず困っています。 例えばA,B,C,Dと4つの文字からなる以下のような組み合わせ作成するループ文を作成したいです。 条件 ・入力文字数は可変します。A,B,C,D→A,B,C,D,E ・組み合わせ内で同じ文字は2度使用されません。 ・A,B,CとB,C,Aは同一とします。 1文字のパターン A B C D 2文字のパターン A,B A,C A,D B,C B,D C,D 3文字のパターン A,B,C A,C,D B,C,D 4文字のパターン A,B,C,D 4文字からなるパターンは全部で14パターンになります。 以上、宜しくお願い致します。 部分集合の総数 「5個の要素を持つ集合Aの部分集合の総数を重複順列の考えを用いて求めよ。また、Aの2個の特定の要素を含むAの部分集合の総数を求めよ。」 という問題で、解答には 「それぞれの要素が部分集合に属するか属さないかの集合があるので・・・」 と書いてありますが、属するか属さないかは1/2の確立なのでしょうか。意味が良く分かりません詳しく教えてください。 高校数学の場合の数で、a、a、a、b、cから3個選 んで1列に並べる方法の総数をすべて求めよ。・・・(1) と、集合U={a,b,c,d,e,f}の部分集合で、3個の要素からなるものをすべて求めよ。・・・(2) とでは、 (1)は文字を並べるわけだから、順番が関係ありますよね(a,b,cとb,a,cは違いますよね)? (2)は文字の組み合わせでいいから、順番は全然関係ありませんよね(a,b,cとb,a,cは同じですよね)? だから、(1)と(2)とでは、辞書式配列法や樹形図の求め方が変わってきますよね? おねがいします_(._.)_ 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
なんとか出来ました! ありがとうございました。