0

このプログラムを変更するのに苦労しています。このアルゴリズムは、繰り返しのないリストを生成するためにすでに正しいものです。ただし、ユーザーの整数の範囲からリストを生成したいと考えています。(1~n)

例: ユーザーが 5 を入力 -> 印刷 (1 2 3 4 5) すると、組み合わせを生成するために 5 つの整数が要求されます。

整数を n 回個別に入力するのではなく、(1-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"
4

1 に答える 1

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;
}

これは、整数とその配列を組み込むように変更する方法です。

于 2013-02-28T02:38:38.247 に答える