自分は麻雀の結果の集計をしていて面倒な作業があり、プログラムを組めないだろうかと考えておりますが、アルゴリズムを作成してコーディングしようにもどうやればいいのか分からないのでどうしたものかと困っております。どうしたらよいか、わかる方はどなたかお教え頂ければ助かります。
質問01.異なる16個~24個の数字があり、その中の4つの数字の和が0ずつになるようにそれぞれ分けたいのですが、どのようにすればよいでしょうか?
例えば、45、10、-25、-30、55、20、-45、-30、25、15、-10、-30、80、25、-35、-70の16個の数字があったとすれば、(45、10、-25、-30)、(55、20、-45、-30)、(25、15、-10、-30)、(80、25、-35、-70)の4つずつ4組にわけられようにできるプログラムを組みたいのです。なお、数字は整数のみで、他にも20個の場合もありますし、24個の場合もあります。
質問02.10人~20人の人数で4人ずつ麻雀卓(10~11人の場合は2つの麻雀卓、12~15人の場合は3つの麻雀卓、16人以上は4つの麻雀卓(最大4卓))に座らせて、5回戦を戦わせたいと考えております。その際には、できる限り違う人と戦わせたいとした場合、どのような組み合わせができるかをプログラムで自動的に割り出したいのですが、どのようにすればよいでしょうか?
なお、10人や11人などの人数の場合は2人余り、3人余りとなり、卓には座れず待つので、その余った人は5回戦の内1回戦えないため4回戦だけとなります。さらに、できるだけばらけた組み合わせは表などのようにわかりやすく表示できればより幸いです。
以上ですが、両方できれば最高ですが、どちらか一方でも構いませんので宜しくお願い致します。
No.4
- 回答日時:
一部訂正です。
for( int i = 1; i <= MEMBERS; i++ ) {
Display( i );
}
は
for( int i = 1; i <= ( NUM / MEMBERS ); i++ ) {
Display( i );
}
の間違いです。
修正の方もありがとうございました。また、他にも、色々なパターンで16個の数字を0になるように4組ずつ分けることができ、12個の場合も問題なく4組ずつわけることができました。私が考えていたように変数が多いわけではないので、これは本当に楽にできました。本当にありがとうございました。
No.3ベストアンサー
- 回答日時:
質問01についてですが、
( 45, 10, -25, -30 )
( 55, 20, -45, -30 )
( 25, 15, -10, -30 )
( 80, 25, -35, -70 )
の組み合わせ以外に、例えば、
( 45, 15, -30, -30 )
( 55, 20, -45, -30 )
( 25, 10, -10, -25 )
( 80, 25, -35, -70 )
の組み合わせも可能だと思うのですが、その組み合わせでもよいのなら、次のようなプログラムでもできます。( C/C++ で書きました。)
#include <stdio.h>
#define TRUE 1
#define FALSE 0
#define NUM 16
#define MEMBERS 4
int num[ NUM ] = { 80, 55, 45, 25, 25, 20, 15, 10, -10, -25, -30, -30, -30, -35, -45, -70 };
int grp[ NUM ] = { 0 };
int Search( int start, int group, int sum, int count );
void Display( int group );
int main( void )
{
Search( 0, 1, 0, 0 );
for( int i = 1; i <= MEMBERS; i++ ) {
Display( i );
}
return 0;
}
int Search( int start, int group, int sum, int count )
{
for( int i = start; i < NUM; i++ ) {
if( grp[ i ] == 0 ) {
if( count == MEMBERS - 1 ) {
if( sum + num[ i ] == 0 ) {
grp[ i ] = group;
if( group == ( NUM / MEMBERS ) ) {
return TRUE;
}
if( Search( 0, group + 1, 0, 0 ) ) {
return TRUE;
}
grp[ i ] = 0;
return FALSE;
}
} else {
grp[ i ] = group;
if( Search( i + 1, group, sum + num[i], count + 1 ) ) {
return TRUE;
}
grp[ i ] = 0;
}
}
}
return FALSE;
}
void Display( int group )
{
int count = 0;
printf( "( " );
for( int i = 0; i < NUM; i++ ) {
if( grp[ i ] == group ) {
printf( "%d", num[ i ] );
count++;
if( count < MEMBERS ) {
putchar( ',' );
putchar( ' ' );
}
}
}
puts( " )" );
}
出力結果
( 80, 25, -35, -70 )
( 55, 20, -30, -45 )
( 45, 15, -30, -30 )
( 25, 10, -10, -25 )
これは、本当にありがとうございました。まさか、ソースまで書いていただけるとは本当にうれしい限りです。早速、中身を解析しつつやってみます。ありがとうございました。本当に助かりましたm(_ _)m。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- 数学 数学A、確率の問題です。 nを4以上の自然数とする。数字の1からnが書かれたカードが1枚ずつ、合計n 3 2023/07/02 22:54
- Java Java 南京錠 2 2023/02/04 11:46
- 釣り 東京湾天秤タチウオの竿頭について ここのところ、3、4、5、6月と毎月東京湾天秤タチウオに行っていま 1 2023/06/11 16:37
- 数学 中一数学の【最大公約数と最小公倍数】の問題です。 1問だけでも教えていただけると嬉しいです。 (1) 4 2022/08/01 10:19
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- 計算機科学 2500円の人と2000円の人の集計 2 2023/08/06 07:18
- その他(データベース) 4進数風なバーコードは何ですか? 2 2022/11/28 23:33
- C言語・C++・C# 石取りゲームをC言語プログラムで教えてください 1 2022/04/09 14:16
- 数学 数学の質問です。 高校数学得意な人!お願いします! 8人のトーナメント戦の組み合わせは何通りか とい 5 2023/06/29 20:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
へんな現象
-
#define _CRT_SECURE_NO_WARNIN...
-
【C++】関数ポインタの使い方
-
複数桁10進数の*桁目だけを抽出...
-
if と配列の組み合わせ
-
(int *)の意味
-
アスタリスクで正方形
-
プログラミングペーパーテスト ...
-
C言語でDxlibを使って3x3の奇数...
-
C言語 巡回セールスマン問題 2-...
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
数字列を3桁ごとにカンマで区切...
-
課題なんですが・・・
-
C 言語の Gauss Jordan 法について
-
ラップ関数とはどんなものですか?
-
C言語 配列と関数の練習問題
-
教えてください(丸罰ゲーム)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語 配列と関数の練習問題
-
複数桁10進数の*桁目だけを抽出...
-
(int *)の意味
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
c言語
-
足して100になるような乱数のア...
-
C言語初心者です、、、お助けく...
-
数字列を3桁ごとにカンマで区切...
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
課題でつまってます・・・
-
商と剰余を同時に求める(C言語)
-
C言語の配列をC++のvectorに高...
-
std::set<int> で、ある値が何...
おすすめ情報