2 条题解

  • 2
    @ 2022-12-27 15:22:46

    俗话说得好,暴力出奇迹。

    #include <bits/stdc++.h>
    using namespace std;
    bool com(char a, char b)
    {
        return a > b;
    }
    char ans[11]="9876543210", s[11];
    int main()
    {
        int n, pro, m = 0;
        bool flag = false;
        while (scanf("%d", &n) != EOF && n)
        {
            if (m > 0)
                cout << endl;
            m++;//输出技巧
            flag = false;
            for (int i = 1234; i <= 50000; i++)
            {
                pro = n * i;
                if (pro > 98765)
                    break;
                if (i < 10000)
                    sprintf(s, "%d%d%d", 0, i, pro);
                else
                    sprintf(s, "%d%d", i, pro);
                sort(s, s + 10, com);
                if (strcmp(s, ans) == 0)
                {
                    printf("%d / %05d = %d\n", pro, i, n);
                    flag = true;
                }
            }
            if (!flag)
                printf("There are no solutions for %d.\n", n);
        }
        return 0;
    }
    
    • -1
      @ 2023-1-12 9:29:43

      这次暴力还真出奇迹了……

      60分dfs做法:

      #include <bits/stdc++.h>
      using namespace std;
      int n , num[15] , book[15];
      bool flag = false;
      void dfs(int step)
      {
          if (step == 11)
          {
              int a = num[1] * 10000 + num[2] * 1000 + num[3] * 100 + num[4] * 10 + num[5];
              int b = num[6] * 10000 + num[7] * 1000 + num[8] * 100 + num[9] * 10 + num[10];
              if (a / b == n && a % b == 0)
              {
                  flag = true;
                  printf("%d%d%d%d%d / %d%d%d%d%d = %d\n" , num[1] , num[2] , num[3] , num[4] , num[5] , num[6] , num[7] , num[8] , num[9] , num[10] , n);
                  return;
              }
          }
          for (int i = 0 ; i <= 9 ; i++)
          {
              if (book[i] == 0)
              {
                  num[step] = i;
                  book[i] = 1;
                  dfs(step + 1);
                  book[i] = 0;
              }
          }
          return;
      }
      
      int main()
      {
          cin >> n;
          while (n)
          {   
              memset(book , 0 , sizeof(book));
              flag = false;
              dfs(1);
              if (!flag)
                  printf("There are no solutions for %d.\n" , n);
              printf("\n");
              cin >> n;
          }
          return 0;
      }
      
    • 1

    信息

    ID
    1916
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    109
    已通过
    65
    上传者