簡體   English   中英

C - 來自用戶輸入數字的所有數字組合

[英]C - all combinations of numbers from user's input number

我有以下代碼,但它無法正常工作:

#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <string>

#define MAXN 100
const unsigned n=4;
const unsigned k=2;
int taken[MAXN];

void print(unsigned i)
{
    unsigned l;
    printf(" ( ");
    for (l=0; l<=i-1; l++) printf("%u ", taken[l] + 1);
    printf(")\n");
}

void variate(unsigned i) 
{
    unsigned j;
    if (i>=k) 
    {
        print(i);
        return;
    }
    for (j=0;j<n;j++)
        {
        taken[i]=j;
        variate(i+1);
        }    
}

void condition(unsigned number) 
{
    unsigned j;
    if (number>=k) 
    {
        print(number);
        return;
    }
    for (j=0;j<n;j++)
        {
        taken[number]=j;
        variate(number+1);
        }

}

int main(void)
{
    variate(0);

      int number;
      printf("Enter number from 1 to 4: \n", number);
      scanf("%d", &number);

      printf("All varians of the combinations with your number are: \n");
    condition(0);

 system ("pause");
  return 0;
}

該程序正在打印數字 1、2、3 和 4 的所有可能組合,並且可以正常工作。 但是void condition不能正常工作。 打印完四個數字的所有可能組合后,用戶必須輸入 1 到 4 之間的數字,並且必須出現所有包含用戶號碼的組合,其余的組合均不出現。

更多已經完成的評論在您的程序中有一些奇怪的事情

  • 從未使用讀取的編號,因此無法根據它給出結果
  • 修改采取給所有的夫妻,但你不前重置它給與讀取數情侶,假設采取非常有用如何在這種情況下可以工作?
  • 全球范圍內為什么如此復雜?

你可以這樣做,有兩種方法可以做第二部分:

#include <stdio.h>

#define MIN 1
#define MAX 4

int main()
{
  /* print all couples */
  for (unsigned i = MIN; i <= MAX; ++i) {
    for (unsigned j = MIN; j <= MAX; ++j) {
      printf("(%u %u)\n", i, j);
    }
  }

  unsigned number;
  printf("Enter number from %d to %d\n", MIN, MAX);
  scanf("%u", &number);

  /* first way following the same order as before */
  puts("same order");

  if ((number >= MIN) && (number <= MAX)) {
    for (unsigned i = MIN; i <= MAX; ++i) {
      for (unsigned j = MIN; j <= MAX; ++j) {
        if ((i == number) || (j == number))
          printf("(%u %u)\n", i, j);
      }
    }
  }

  /* an other way, faster but not in the same order */
  puts("different order");

  printf("(%u %u)\n", number, number);
  for (unsigned i = MIN; i < number; ++i) {
    printf("(%u %u)\n(%u %u)\n", number, i, i, number);
  }
  for (unsigned i = number + 1; i <= MAX; ++i) {
    printf("(%u %u)\n(%u %u)\n", number, i, i, number);
  }

  return 0;
}

執行 :

(1 1)
(1 2)
(1 3)
(1 4)
(2 1)
(2 2)
(2 3)
(2 4)
(3 1)
(3 2)
(3 3)
(3 4)
(4 1)
(4 2)
(4 3)
(4 4)
Enter number from 1 to 4
2
same order
(1 2)
(2 1)
(2 2)
(2 3)
(2 4)
(3 2)
(4 2)
different order
(2 2)
(2 1)
(1 2)
(2 3)
(3 2)
(2 4)
(4 2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM