#11
by あたっしゅ » 2年前
東上☆海美☆「
コード:
//
// https://dixq.net/forum/viewtopic.php?f=3&t=21547
// 組み合わせ?のプログラムの考え方が分かりません!! - ミクプラ(ja)
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int BUFMAX = 5 * 2 + 1;
char buf[ BUFMAX ];
int
calc(int sum, char* pBuf, const int* a, const int* b)
{
while (*a != 0 && * b != 0) {
sum += *b;
*pBuf++ = (*b) + '0';
*pBuf++ = ' ';
*pBuf = 0;
#ifdef _DEBUG
printf( ":%d:", *b );
#endif
if (sum == 10) {
printf("%s[%d]成功\n", buf, sum);
return sum;
} else if (sum > 10) {
#ifdef _DEBUG
printf("%s[%d]失敗\n", buf, sum);
#endif
return sum;
} else {
printf("%s[%d]\n", buf, sum);
}
calc(sum, pBuf, a, b);
while (*b != 0) {
b++;
if (*b == 0) {
break;
}
else
{
#ifdef _DEBUG
printf("$%d$", *b);
#endif
calc(sum, pBuf, a, b);
}
}
}
return sum;
}
int
main() try
{
memset(buf, 0, BUFMAX);
{
const int array[] = { 5, 4, 3, 2, 0 };
const int* ptr = array;
int i = 0;
while ( *ptr > 0) {
calc(0, buf, ptr, ptr );
ptr++;
}
}
return EXIT_SUCCESS;
}
catch (...)
{
return EXIT_FAILURE;
}
// end.
5 [5]
5 5 [10]成功
5 4 [9]
5 3 [8]
5 3 2 [10]成功
5 2 [7]
5 2 2 [9]
4 [4]
4 4 [8]
4 4 2 [10]成功
4 3 [7]
4 3 3 [10]成功
4 3 2 [9]
4 2 [6]
4 2 2 [8]
4 2 2 2 [10]成功
3 [3]
3 3 [6]
3 3 3 [9]
3 3 2 [8]
3 3 2 2 [10]成功
3 2 [5]
3 2 2 [7]
3 2 2 2 [9]
2 [2]
2 2 [4]
2 2 2 [6]
2 2 2 2 [8]
2 2 2 2 2 [10]成功
29 通りで、空集合入れると 30 通りみみ。
」
東上☆海美☆「
[code]
//
// https://dixq.net/forum/viewtopic.php?f=3&t=21547
// 組み合わせ?のプログラムの考え方が分かりません!! - ミクプラ(ja)
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int BUFMAX = 5 * 2 + 1;
char buf[ BUFMAX ];
int
calc(int sum, char* pBuf, const int* a, const int* b)
{
while (*a != 0 && * b != 0) {
sum += *b;
*pBuf++ = (*b) + '0';
*pBuf++ = ' ';
*pBuf = 0;
#ifdef _DEBUG
printf( ":%d:", *b );
#endif
if (sum == 10) {
printf("%s[%d]成功\n", buf, sum);
return sum;
} else if (sum > 10) {
#ifdef _DEBUG
printf("%s[%d]失敗\n", buf, sum);
#endif
return sum;
} else {
printf("%s[%d]\n", buf, sum);
}
calc(sum, pBuf, a, b);
while (*b != 0) {
b++;
if (*b == 0) {
break;
}
else
{
#ifdef _DEBUG
printf("$%d$", *b);
#endif
calc(sum, pBuf, a, b);
}
}
}
return sum;
}
int
main() try
{
memset(buf, 0, BUFMAX);
{
const int array[] = { 5, 4, 3, 2, 0 };
const int* ptr = array;
int i = 0;
while ( *ptr > 0) {
calc(0, buf, ptr, ptr );
ptr++;
}
}
return EXIT_SUCCESS;
}
catch (...)
{
return EXIT_FAILURE;
}
// end.
[/code]
5 [5]
5 5 [10]成功
5 4 [9]
5 3 [8]
5 3 2 [10]成功
5 2 [7]
5 2 2 [9]
4 [4]
4 4 [8]
4 4 2 [10]成功
4 3 [7]
4 3 3 [10]成功
4 3 2 [9]
4 2 [6]
4 2 2 [8]
4 2 2 2 [10]成功
3 [3]
3 3 [6]
3 3 3 [9]
3 3 2 [8]
3 3 2 2 [10]成功
3 2 [5]
3 2 2 [7]
3 2 2 2 [9]
2 [2]
2 2 [4]
2 2 2 [6]
2 2 2 2 [8]
2 2 2 2 2 [10]成功
29 通りで、空集合入れると 30 通りみみ。
」