- ベストアンサー
組分けをプログラムで表現するには??
例えば3人の場合、{3}、{1,2}、{1,1,1}の3組に。 5人場合、{5}、{1,4}、{2,3}、{1,1,3}、{1,2,2}、{1,1,1,2}、{1,1,1,1,1}の7組に。 人数(n=)を入力すると上のような組分けと組がいくつ出来たかを表示させるプログラム(Cか出来ればmathematicaで)を作りたいのですが、なかなか作成できません。もしよろしければアルゴリズムなど何か少しでもアドバイス頂けると幸いです。(Cの場合、上のような{●,●}をどのように表すと良いでしょうか)
- みんなの回答 (5)
- 専門家の回答
関連するQ&A
- 値によって組み分けを作成するプログラムについて
こんにちは。 プログラミングでつまってしまったため質問させて頂きます。 プログラミング言語はC++です(visual c++ではありません)。 ■作成したいプログラム A,B,C,D,Eがある。 AとBの類似度は91% 以下同様に AとCは89% AとDは79% AとEは77% BとCは93% BとDは97% ・・・のように続いていく.. (*ABが似ている、BCが似ている。だからと言ってACが似ているとは言えない。) この中で、類似度が閾値以上である場合は同じ組とする。 ただし、複数のパターンが考えられる場合は組の数が一番すくなくなるように作る。 ■プログラムの動作イメージ 例1: 閾値=0.90 //入力データ 01 = 0.91; OK 02 = 0.90; OK 03 = 0.78; NG 04 = 0.83; NG 12 = 0.94; OK 13 = 0.78; NG 14 = 0.77; NG 23 = 0.78; NG 24 = 0.69; NG 34 = 0.94; OK OKなのは,01,02,12,34 つまり以下のような出力が得られる >>0,1,2 >>3,4 --------------------------------------- 例2: 閾値=0.90 //入力データ 01 = 0.91; OK 02 = 0.90; OK 03 = 0.94; OK 04 = 0.83; NG 12 = 0.95; OK 13 = 0.78; NG 14 = 0.77; NG 23 = 0.78; NG 24 = 0.69; NG 34 = 0.94; OK OKなのは,01,02,03,12,34 つまり 0,1,2 3,4 or 0,3 1,2 4 となった場合は、組数の少ない上を選択する。 従って以下のような出力が得られる。 >>0,1,2 >>3,4 --------------------------------------- 例3: 閾値=0.90 //入力データ 01 = 0.91; OK 02 = 0.90; OK 03 = 0.78; NG 04 = 0.83; NG 12 = 0.77; NG 13 = 0.78; NG 14 = 0.77; NG 23 = 0.78; NG 24 = 0.69; NG 34 = 0.94; OK OKなのは,01,02,34 この場合は、01と02は閾値を超えているが、12は閾値を超えていないため、 0,1,2を同じ組とはできない。 従って以下の2パターンが考えられる。 0,1 2 3,4 or 0,2 1 3,4 この場合は組の数は同じなのでどちらが出力されてもOK。 番号の若いものから出力されるとすると以下のような出力が得られる。 >>0,1 >>2 >>3,4 ------------------------------------------------------ 以上のようなプログラムを作成したいです。 自分で考えてみたのプログラムが以下のものです。 01,02,12,34は閾値を超えているということまではできたのですが、その後のグループの作り方のところで詰まってしまいました。 そこで、上記のような動作をするプログラムについて教えていただきたいです。 よろしくお願い致します。 int main(){ //閾値 double THRESHOLD = 0.9; //dataを格納する配列 double in_data[5][5] = {0}; //group_flagを格納する配列 bool group_flag[5][5] = {0}; in_data[0][1] = 0.91; in_data[0][2] = 0.90; in_data[0][3] = 0.78; in_data[0][4] = 0.83; in_data[1][2] = 0.94; in_data[1][3] = 0.78; in_data[1][4] = 0.77; in_data[2][3] = 0.78; in_data[2][4] = 0.69; in_data[3][4] = 0.94; //組の番号を格納する配列 //group[3]=2だったら、データ3はグループ2に入る int group[5]; int i=5; //データ数 int num=0; for(int n=0; n<=i; n++){ for(int m=n+1; m<i ;m++){ cout << "in_data[" << n << "][" << m << "]=" << in_data[n][m] << endl; if(in_data[n][m] >= THRESHOLD){ cout << "OK" << endl; group_flag[n][m] = 1; } } } for(int n=0; n<=i; n++){ for(int m=n+1; m<i ;m++){ if(group_flag[n][m] == 1){ cout << n << m <<endl; } } } }
- ベストアンサー
- C・C++・C#
- 反転のプログラムについて
プログラムの質問で「入力された正の整数において、桁の順序を反転したプログラムを作れ。321→123、32100→123など。0の時は0と表示させろ」という問題がどうしてもわかりません。講師の人が10で割ればいいと言ってるんですがいまいちわかっていません。使ってるのはVisual Stadio 2005のC++です。教えてもらえませんか?ついでに 「M以上N以下の正の整数で、素数であるものを小さい方から表示するプログラムを作れ」も教えてもらえれば幸いです。アドバイスでも結構ですのでよろしくお願いします
- 締切済み
- 大学・短大
- このプログラム見てほしいです!!
#include <stdio.h> int gcd2(int a, int b) { if (!b) return a; return gcd2(b, a%b); } int main() { int a, b, c; printf("2つの任意の整数を入力せよ:"); scanf("%d %d",&a,&b); c=gcd2(a,b); printf("最小公倍数は%d\n",a*b/c); printf("最大公約数は%d\n",c); return 0; } で、最小公約数を出すことはできたのですが、全ての公約数を表示させたいんです!!どうやったらいいのでしょうか??プログラミングまだ初心者なので、ちょっと行き詰ってしまいました。。。 お時間があればでいいのですが、もう一つわからないプログラムがあります。 自然数nを入力し、x^2+y^2=z^2 (x<y)を満たすようなn以下の自然数の組(x,y,z)がいくつあるのかを出力するプログラムなのですが、全くわからず行き詰っています。。どなたかお時間があれば教えて頂きたいです。 色々と申し訳ありません。お願いします(__)
- ベストアンサー
- C・C++・C#
- プログラムが上手く動作しません。
質問です。 1.整数を1個入力し、その数を3で割った余りが0ならば"Good morning"、1ならば"Good evening"、2ならば"Good afternoon"と出力するプログラムを作成せよ。ただしswhitc文を用いること。 という問題で私は #include <stdio.h> main() { int a; printf("整数a:"); scanf("%d",&a); switch(a%3) { case '0': printf("Good morning \n"); break; case '1': printf("Good evening \n"); break; case '2': printf("Good afternoon \n"); break; } } と考えましたが実行しても入力はできますがprintfが表示されません。 どこが間違っているのでしょうか?ちゃんとコンパイルはできるのですが・・・。 2.10個の整数値をキー入力し、合計と平均値を計算してその結果を表示するプログラムを書きなさい。 #include <stdio.h> main() { int a[11],b,c,i; for(i=1;i<11;i++) { printf("整数%d:\n",i); scanf("%d",&a[i]); } for(i=1;i<11;i++) b+=a[i]; c=b/10; printf("合計値は%d",b); printf("平均値は%d",c); } というプログラムを考えましたが、計算結果がめちゃくちゃになってしまいます。 これもどこを直したらいいべきでしょうか?
- ベストアンサー
- C・C++・C#
- C++のプログラム
C言語の問題を授業で出されたのですがさっぱり分かりません。教えて下さい。 1.キーボードから整数nを入力して、1+2+…+nを求めるプログラムを作れ。 2.キーボードから整数nを入力して、1*2*…*nを求めるプログラムを作れ。 3.キーボードから10個の実数を入力し、それらの平均を求めるプログラムを作 れ。 4.円錐の体積を求めるプログラムを作れ。 注:円錐体積V=π*r*r*h/3 5.キーボードから文字列を入力し、それを逆さまにするプログラムを作れ。例えば、”dog”を逆さまにすると”god”になる。 6.キーボードから一つの整数を入力し、それは奇数か偶数かを判断するプログラムを作れ。 ちなみに6番は /* iftst.c */ #include <stdio.h> void main(void) { int n; printf("n="); scanf("%d",&n); if(n%2 == 0){ printf("偶数です\n"); } else{ printf("奇数です\n"); } } で合っているのでしょうか?
- 締切済み
- C・C++・C#
- キーボードの入力としてOSに渡すプログラム
キーボードの入力としてOSに渡すプログラムを作りたいんですが、どうすればいいでしょうか? 具体的には メモ帳などに入力のカーソルを出してる状態で、 プログラムを起動するとプログラムであらかじめ指定しておいたキーが押されたものとしてメモ帳に入力されるようなプログラムなのですがどうやればいいでしょうか? 自動入力といった感じのものなのですが。 C言語でコンソールアプリあたりで作ろうと思っているのですが使用できる関数やアルゴリズムなど教えてください。
- ベストアンサー
- C・C++・C#
- このプログラムみてもらえますか?
課題は標準入力から正整数aを読み込み、aが素数であるか否か判定するプログラムを作れ、です。 #include <stdio.h> int main(void) { int a,b,c; for(;;){ printf("正整数を入力して下さい。\n"); scanf("%d",&a); c=a%b; for(b=2;b=a-1;b=b+1){ if(c==0) printf("素数でない。\n"); break; } printf("素数です。\n"); break; return(0); } } コンパイルはできますが、実行すると9が「素数です」と表示されます^^; よろしくおねがいします。
- ベストアンサー
- C・C++・C#
- プログラム言語に上下関係ってありますか?
プログラム言語に上下関係ってありますか? 私は、普段プログラミングするとき、表計算ソフトとの連携が容易であり、 グラフ化が簡単にできると理由から、Excelに付属のるVBAを使います。 しかしながら、私の中ではVBAはExcelに毛が生えた程度で、 極めて初心者用のプログラムだと思っています。 やはりC言語やMathematicaの方がプロ仕様という感じがして、 レベルが上のように思います。 そのため、他人にそのプログラムは何で書きましたか? 聞かれたときに、「VBAです」と答えるのですが、「何だVBAか」と思われていないかと 少し引けを感じてしまいます。 でも、実際、どうなんでしょうか? 勝手に私の中でVBAよりC言語やMathematicaの方が偉いと思っているだけなのでしょうか? それとも実際に、ほとんど人が同じように思っているのでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- 二進数にするプログラム
C言語の問題なんですが、なかなかできません。 途中までやったんですがこれからどうすればいいか分かりません。 1、まず、整数をどんどん入力し、最後に負の数を入力する。負の数が入力されると、これまで入力された数を逆順で表示するプログラムを作成する。 2、1でできたものを利用して、何か数字が入力されたら、それを二進数に直すプログラムを作成する。ただし、二進数の桁数は1000桁以内とする。 ここまでやったんですがこれからどうすればいいか分かりません。 どなたか知恵を貸してくれませんか? #include<stdio.h> int main() { int z[1000],Z,i; printf("正の整数を入力してください:\n"); for(i=0;1<1000;i++); { scanf("%d",&z[i]); if(z[i]<0) break; } Z=i; for(i=0;i<Z/2;i++) { int temp=z[i]; z[i]=z[Z-1-i]; z[Z-1-i]=temp; } printf("入力した要素を逆順に並べると:\n"); for(i=0;i<Z;i++) printf("%d\n",z[i]); return(0); }
- ベストアンサー
- C・C++・C#
- brother p touch edditorで文字入力時のタイムラグが5秒ほどあります。解決方法を教えてください。
- お使いの環境はmac osです。接続はインストールされたソフトです。
- この問題に関してブラザー製品について質問です。
お礼
このように丁寧なプログラムまで書いて頂きありがとうございます!感謝いたします!