#2
rjsp2023-05-12 12:29
不知所云,你想问什么?为什么在你的提问中连个问号都没有?
如果是指 int num = 4; int result[num]; 不能编译通过的话,那既然你用了VLA,就应该选用支持VLA的编译器 ------ 比如gcc、clang等等。 或者将代码改为 constexpr int num = 4; int result[num]; 然后选用支持C23标准的编译器 ------ 比如gcc14(编译参数添加-std=c2x)。 ------------------------------------------------ 欲实现的功能本身挺有意思的,我试着将使用者与算法本身分离 程序代码: #include <stdio.h> #include <stdbool.h> struct combine { const int* arr; const size_t arr_n; size_t* result; const size_t result_n; }; bool combine_create( struct combine* cb ) { for( size_t i=0; i!=cb->result_n; ++i ) cb->result[i] = i; return cb->result_n <= cb->arr_n; } bool combine_increase( struct combine* cb ) { for( size_t i=0; i!=cb->result_n; ++i ) { size_t j = cb->result_n-1-i; if( cb->result[j] != cb->arr_n-1-i ) { ++cb->result[j]; for( ++j; j!=cb->result_n; ++j ) cb->result[j] = cb->result[j-1] + 1; return true; } } return false; } int main( void ) { int arr[] = { 1, 2, 3, 4, 5, 6 }; size_t result[4]; const size_t arr_n = sizeof(arr)/sizeof(*arr); const size_t result_n = sizeof(result)/sizeof(*result); struct combine cb = { arr, arr_n, result, result_n }; for( bool b=combine_create(&cb); b; b=combine_increase(&cb) ) { for( size_t i=0; i!=result_n; ++i ) printf( "%d%c", arr[result[i]], "\t\n"[i+1==result_n] ); } return 0; } |
/* Note:Your choice is C IDE */
#include "stdio.h"
void combine_increase(int* arr,int start, int* result, int count, const int NUM, const int arr_len)
{
int i = 0;
for (i = start; i < arr_len + 1 - count; i++)
{
result[count-1] = i;
if (count - 1 == 0)
{
int j;
for (j = NUM - 1; j >= 0; j--)
printf("%d\t",arr[result[j]]);
printf("\n");
}
else
combine_increase(arr,i + 1, result, count - 1, NUM, arr_len);
}
}
int main()
{
int arr[] = {1, 2, 3, 4, 5, 6};
int num = 4;
int result[num];
combine_increase(arr, 0, result, num, num, sizeof(arr)/sizeof(int));
printf("分界线\n");
/*combine_decrease(arr,sizeof(arr)/sizeof(int),result,num,num);*/
return 0;
}