[C言語]ペクジュン15663~156666:NとM(9)~(12)



構想


そのまま一気に解けた.しかし、最初は間違った答えで、例を見れば、同じ値は2回も現れないことがわかります.だから条件はprint[depth]!=arr[i]を追加して行いますが、例はすべて正しいですが、3、1、12を入れると2行しか出力されません.
デバッグ後,1 1 1 2,1 2 1の出力効果は良好であったが,2 1 1に保存したが,1 1は同じ値でbt関数(print[depth]が現在値)に入ることはできなかった.
したがってvalueを作成し、前の値を保存するときにarr[i]と比較するようにします.
残りの3つも同じです.
#include <stdio.h>
#include <stdlib.h>

int n, m;
int arr[10];
int test[10];
int print[10];

int compare(const void *a, const void *b)
{
    int num1 = *(int *)a;
    int num2 = *(int *)b;
    if (num1 < num2)
        return -1;

    if (num1 > num2)
        return 1;

    return 0;
}

void bt(int depth)
{
	int i;
	int value = -1;
	if (m == depth)
	{
		i = 0;
		while (i < m)
		{
			printf("%d ",print[i]);
			i++;
		}
		printf("\n");
	}
	else
	{
		i = 0;
		while (i < n)
		{
			if (test[i] == 0 && value != arr[i])
			{
				value = arr[i];
				test[i] = 1;
				print[depth] = arr[i];
				bt(depth + 1);
				test[i] = 0;
			}
			i++;
		}
	}
}

int main()
{
	int i;
	scanf("%d %d", &n, &m);
	i = 0;
	while(i < n)
	{
		scanf("%d", &arr[i]);
		i++;
	}
	qsort(arr, n, sizeof(int), compare);
	bt(0);
}