由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 10个数所有的组对可能, 怎么解?
相关主题
free(char *)的问题 (转载)我也来个。某公司招初级C程序员的面试题。[转载]
大家看看这个简单的qsort排序的问题呼叫THRUST等C语言牛牛,菜鸟级C语言指针问题
再问一个free()的问题为什么要这样计算数中元素的个数?
func调用结束时出错unsigned long long
数组问题C 语言,初学者,简单问题
看下这个小程序c的问题
怎么得到char *分配空间的大小?其实到今天也没真正搞懂数组参数的传递问题
char s[]和char *ps的不同一个关于methodology的问题
相关话题的讨论汇总
话题: 10话题: int话题: pairs话题: printf话题: end
进入Programming版参与讨论
1 (共1页)
q********a
发帖数: 165
1
不是任何面试题,是我自己需要解决的一个问题,但我手艺不精,搞不定,拜托帮我看看怎
么写code.
就是从1到10, 十个整数, 两个两个组对,比如
1 2,3 4,5 6,7 8,9 10
1 2,3 4,5 6,8 9,7,10
...
我需要得出所有的组合, 咋整?
谢谢!
D****A
发帖数: 360
2
recursion.
pairs(n) = {1..n-1 × n} U pairs(n-1)

【在 q********a 的大作中提到】
: 不是任何面试题,是我自己需要解决的一个问题,但我手艺不精,搞不定,拜托帮我看看怎
: 么写code.
: 就是从1到10, 十个整数, 两个两个组对,比如
: 1 2,3 4,5 6,7 8,9 10
: 1 2,3 4,5 6,8 9,7,10
: ...
: 我需要得出所有的组合, 咋整?
: 谢谢!

q********a
发帖数: 165
3
多谢! 能再通俗易懂些吗? 我不是专业写code的...
上programing课的时候最头疼的就是recursion,这么多年不用它也糊过来了...

【在 D****A 的大作中提到】
: recursion.
: pairs(n) = {1..n-1 × n} U pairs(n-1)

X****r
发帖数: 3557
4
如果不考虑效率的话(比如你这里只有10个数)可以直接利用C++的next_permutation
(如果你不用C++的话next_permutation的代码也很简单),滤掉所有重复的就行了:
#include
template bool next_pairs(T begin, T end) {
while (std::next_permutation(begin, end)) {
T p;
for (p = begin; p != end; p += 2) {
if (*p > *(p+1) || p+2 != end && *p > *(p+2)) {
break;
}
}
if (p == end) {
return true;
}
}
return false;
}
用法:
int x[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int x_end = x + sizeof(x) / sizeof(*x)

【在 q********a 的大作中提到】
: 不是任何面试题,是我自己需要解决的一个问题,但我手艺不精,搞不定,拜托帮我看看怎
: 么写code.
: 就是从1到10, 十个整数, 两个两个组对,比如
: 1 2,3 4,5 6,7 8,9 10
: 1 2,3 4,5 6,8 9,7,10
: ...
: 我需要得出所有的组合, 咋整?
: 谢谢!

X****r
发帖数: 3557
5
后面那个n-1应该是n-2

【在 D****A 的大作中提到】
: recursion.
: pairs(n) = {1..n-1 × n} U pairs(n-1)

D****A
发帖数: 360
6
不用recursion也成,你就
int pairs (int n) {
int i, j;
if (n < 2)
return -1;
for (i = 1; i <= n - 1; i++)
for (j = i + 1; j <= n; j++)
printf ("%d %d\n", i, j);
return 0;
}

【在 q********a 的大作中提到】
: 多谢! 能再通俗易懂些吗? 我不是专业写code的...
: 上programing课的时候最头疼的就是recursion,这么多年不用它也糊过来了...

X****r
发帖数: 3557
7
你理解错楼主的意思了吧,楼主要的结果的每一项都是5对,由所有的10个数两两组成。
比如以下列出的是所有结果的10/945:
1 2, 3 4, 5 6, 7 8, 9 10
1 2, 3 4, 5 6, 7 9, 8 10
1 2, 3 4, 5 6, 7 10, 8 9
1 2, 3 4, 5 7, 6 8, 9 10
1 2, 3 4, 5 7, 6 9, 8 10
1 2, 3 4, 5 7, 6 10, 8 9
1 2, 3 4, 5 8, 6 7, 9 10
1 2, 3 4, 5 8, 6 9, 7 10
1 2, 3 4, 5 8, 6 10, 7 9
1 2, 3 4, 5 9, 6 7, 8 10

【在 D****A 的大作中提到】
: 不用recursion也成,你就
: int pairs (int n) {
: int i, j;
: if (n < 2)
: return -1;
: for (i = 1; i <= n - 1; i++)
: for (j = i + 1; j <= n; j++)
: printf ("%d %d\n", i, j);
: return 0;
: }

q********a
发帖数: 165
8
谢谢, 谢谢! 是这个意思, 效率不重要, 我就要这个结果, 然后output给下一步用...

成。

【在 X****r 的大作中提到】
: 你理解错楼主的意思了吧,楼主要的结果的每一项都是5对,由所有的10个数两两组成。
: 比如以下列出的是所有结果的10/945:
: 1 2, 3 4, 5 6, 7 8, 9 10
: 1 2, 3 4, 5 6, 7 9, 8 10
: 1 2, 3 4, 5 6, 7 10, 8 9
: 1 2, 3 4, 5 7, 6 8, 9 10
: 1 2, 3 4, 5 7, 6 9, 8 10
: 1 2, 3 4, 5 7, 6 10, 8 9
: 1 2, 3 4, 5 8, 6 7, 9 10
: 1 2, 3 4, 5 8, 6 9, 7 10

D****A
发帖数: 360
9
。。。。。
一看组合以为是10取2呢,LOL

成。

【在 X****r 的大作中提到】
: 你理解错楼主的意思了吧,楼主要的结果的每一项都是5对,由所有的10个数两两组成。
: 比如以下列出的是所有结果的10/945:
: 1 2, 3 4, 5 6, 7 8, 9 10
: 1 2, 3 4, 5 6, 7 9, 8 10
: 1 2, 3 4, 5 6, 7 10, 8 9
: 1 2, 3 4, 5 7, 6 8, 9 10
: 1 2, 3 4, 5 7, 6 9, 8 10
: 1 2, 3 4, 5 7, 6 10, 8 9
: 1 2, 3 4, 5 8, 6 7, 9 10
: 1 2, 3 4, 5 8, 6 9, 7 10

X****r
发帖数: 3557
10
希望我没有理解错你的意思,就是这五对的顺序不相关,每对之内的顺序也不相关。
比如
1 10, 2 9, 3 8, 4 7, 5 6

1 10, 2 9, 3 8, 5 6, 7 4
是同一个结果,不希望重复列出。
其实用递归也不太复杂:
#include
void print(int x[], int n) {
int i;
for (i = 0; i < n; i += 2) {
if (i) {
printf(", ");
}
printf("%d %d", x[i], x[i+1]);
}
printf("\n");
}
void print_pairs(int x[], int n, int i) {
if (i == n) {
// Get one set of result, do something on x[].
print(x, n);
} else {
int tmp, j;
for (j = ++i; j < n; j++) {
if (

【在 q********a 的大作中提到】
: 谢谢, 谢谢! 是这个意思, 效率不重要, 我就要这个结果, 然后output给下一步用...
:
: 成。

z****e
发帖数: 2024
11
orz

【在 X****r 的大作中提到】
: 希望我没有理解错你的意思,就是这五对的顺序不相关,每对之内的顺序也不相关。
: 比如
: 1 10, 2 9, 3 8, 4 7, 5 6
: 和
: 1 10, 2 9, 3 8, 5 6, 7 4
: 是同一个结果,不希望重复列出。
: 其实用递归也不太复杂:
: #include
: void print(int x[], int n) {
: int i;

1 (共1页)
进入Programming版参与讨论
相关主题
一个关于methodology的问题数组问题
ask a question about struct in C programming看下这个小程序
这里有人用 Erlang 吗?怎么得到char *分配空间的大小?
FP 和 Procedural Programming 有什么不同?char s[]和char *ps的不同
free(char *)的问题 (转载)我也来个。某公司招初级C程序员的面试题。[转载]
大家看看这个简单的qsort排序的问题呼叫THRUST等C语言牛牛,菜鸟级C语言指针问题
再问一个free()的问题为什么要这样计算数中元素的个数?
func调用结束时出错unsigned long long
相关话题的讨论汇总
话题: 10话题: int话题: pairs话题: printf话题: end