我很难改变这个程序。该算法已经正确用于生成非重复列表。但是,我希望从用户整数的范围生成列表。 (1到n)
例如:用户输入5 - >打印(1 2 3 4 5)然后要求5个整数来生成组合。
如何更改此设置,以便从(1-n)找到组合,而不是单独输入n次整数?任何帮助将不胜感激。 (对不起,如果它很乱,我是学生:P)
#include<stdio.h> stdio.h
#include<stdlib.h> stdlib.h
int a1[50], a2[50]; // arrays
int count=-1, range;
int w; // user defined variable
void main()
{
printf("Please enter a number. (1-10): ");
scanf("%d", &w);
int x,y; // comparing
printf("You have entered %d\n\n",w);
for(range=1; range<=w; range++){
printf("%d", range);
printf(" ");
} // end for "range"
printf("\n");
for(x=0; x<w; x++){
a1[x]=0;
y=x+1;
scanf("%d\n\n" ,&a2[y]);
}// end for
combo(w);
} // end main
combo(int z) // function with algorithm to find combonations
{
while (w<1 || w>10){
printf("\nThat number is not in range. Please try again. \n\n");
printf("Please enter a number. (1-10): ");
scanf("%d", &w);
} // end while
int x;
a1[z]=++count;
if(count==w){
for(x=0; x<w; x++)
printf("%2d",a2[a1[x]]);
printf(" ");
} // end if
for(x=0; x<w; x++)
if(a1[x]==0)
combo(x);
count--;
a1[z]=0;
} // end "combo"
答案 0 :(得分:2)
#include <stdio.h>
#include <string.h>
void swap (int *X, int *Y)
{
int temp;
temp = *X;
*X = *Y;
*Y = temp;
}
void print_array(int *a, int n) {
int i;
printf("\t=> ");
for(i = 0; i < n; i++){
printf("%d, ", a[i]);
}
printf("\n");
}
void mixmatch (int *Arr, int i, int n)
{
int j;
int *A = Arr;
if (i == n)
print_array(A,n+1);
else
{
for (j = i; j <= n; j++)
{
swap((A+i), (A+j));
mixmatch(A, i+1, n);
swap((A+i), (A+j));
}
}
}
int main()
{
int A[10];
int k;
int i;
printf("Enter a number between (1-10):");
scanf("%d", &k);
for(i = 0; i < k && i < 10; i++) {
printf("%d, ",i);
A[i] = i;
}
printf("\n");
mixmatch(A, 0, k-1);
return 0;
}
这是您可以修改它以合并它们的整数和数组的方法。