Danmoits 发表于 2020-11-14 18:49:39

输出abcde/fghij=x表达式

本帖最后由 Danmoits 于 2020-11-15 08:27 编辑

任务描述
本关任务:输入正整数x(2≤x≤79),输出所有形如abcde/fghij=x的表达式,其中i-j由不同的数字0~9组成。

编程要求
在右侧编辑器补充代码,输入x后输出形如abcde/fghij=x的表达式。

测试输入:32;
预期输出:75168/02349=32

测试输入:12;
预期输出:
45792/03816=12
73548/06129=12
89532/07461=12
91584/07632=12

#include<stdio.h>
int main()
{   
    int h,i,l,m,k,n,p=0,count=0;
    double num;
    double num_;
    int repeat;
    double div;
    for(i=0;i<100000;i++)
    {
      num=i;
      /*把0到99999的所有数存入数组*/
    }
    for(i=0;i<100000;i++)
    {
            for(h=0;h<5;h++,num/10)
            {
                    repeat=(int)num%10;
                    /*repeat存放每一位数字*/
            }
                for(l=0;l<5;l++)
                {
                        for(m=0;m<5;m++)
                        {
                                if(repeat==repeat)
                                {
                                        count=1;
                                }
                        }
                }
                        /*如果有重复数字,count不为0*/
                        if(count==0)
                        {
                                num_=num;
                                p++;
                        }
                        count=0;
                }
        }
    scanf("%d",&n);
    for(i=0;i<100000;i++)
    {
      for(k=0;k<100000;k++)
            {   
                div=num*1.0/num;
                if(div==n)
                  printf("%05.0f/%05.0f=%d\n",num,num,n);
            }
    }
    return 0;
}

这是我的代码,报错信息:(表示自己看不懂)
src/step10/step10_main.c:40:11: error: expected declaration specifiers or ‘…’ before string constant
scanf(“%d”,&n);
^~
src/step10/step10_main.c:40:16: error: expected declaration specifiers or ‘…’ before ‘&’ token
scanf(“%d”,&n);
^
src/step10/step10_main.c:41:5: error: expected identifier or ‘(’ before ‘for’
for(i=0;i<100000;i++)
^
src/step10/step10_main.c:41:14: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
for(i=0;i<100000;i++)
^
src/step10/step10_main.c:41:23: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘++’ token
for(i=0;i<100000;i++)
^~
src/step10/step10_main.c:50:5: error: expected identifier or ‘(’ before ‘return’
return 0;
^~
src/step10/step10_main.c:51:1: error: expected identifier or ‘(’ before ‘}’ token
}
^

可以修改我的代码,也可以提供新的代码。(运行时间在20s以内)

jackz007 发表于 2020-11-14 20:53:04

#include <stdio.h>

int check1(int n)
{
      int d = {0} , i , j , m , r                   ;
      for(m = 0 ; n ; n /= 10 , m ++) d = n % 10    ;
      for(r = 1 , i = 0 ; i < m - 1 && r ; i ++) {
                for(j = i + 1 ; j < m ; j ++) {
                        if(d == d) {
                              r --                     ;
                              break                  ;
                        }
                }               
      }
      return r                                       ;
}

int check2(int a , int b)
{
      int d = {0} , e = {0} , i , j, m , n , r ;
      for(m = 0 ; a ; a /= 10 , m ++) d = a % 10    ;
      for(n = 0 ; b ; b /= 10 , n ++) e = b % 10    ;
      r = 0                                          ;
      if(m + n > 8) {
                for(r = 1 , i = 0 ; i < m && r ; i ++) {
                        for(j = 0 ; j < n ; j ++) {
                              if(e == d) {
                                        r --             ;
                                        break            ;
                              }
                        }
                }
      }      
      return r                                       ;
}

main(void)
{
      int i , j , m , n                                                                ;
      scanf("%d" , & m)                                                                ;
      for(n = 0 , i = 1000 ; i < 100000 ; i ++) {
                if(check1(i)) {
                        for(j = 1000 ; j < 100000 ; j ++) {
                              if(check1(j) && check2(i , j)) {
                                        if(i % j == 0 && i / j == m) {
                                                printf("%d / %d = %d\n" , i , j , i / j) ;
                                                n ++                                     ;
                                        }
                              }
                        }
                }      
      }
}
      编译、运行实况:
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
12
45792 / 3816
50376 / 4198
71208 / 5934
73128 / 6094
73548 / 6129
81504 / 6792
86304 / 7192
86340 / 7195
89532 / 7461
91032 / 7586
91584 / 7632
97620 / 8135

D:\00.Excise\C>

Danmoits 发表于 2020-11-14 20:58:34

jackz007 发表于 2020-11-14 20:53
编译、运行实况:

为什么在dev上运行你的代码,输入数字后什么反应都没有

jackz007 发表于 2020-11-14 21:04:43

Danmoits 发表于 2020-11-14 20:58
为什么在dev上运行你的代码,输入数字后什么反应都没有

      会有结果的,需要一点时间和耐心,等等看。

jackz007 发表于 2020-11-14 21:29:08

本帖最后由 jackz007 于 2020-11-14 21:43 编辑

       结果有问题,没有考虑 4 位数时的前导 0,下面是修改过的代码与编译、运行结果
#include <stdio.h>

int check1(int n)
{
      int d = {0} , i , j , m , r                   ;
      for(i = 0 ; n ; n /= 10 , i ++) d = n % 10    ;
      for(r = 1 , i = 0 ; i < 4 && r ; i ++) {
                for(j = i + 1 ; j < 5 ; j ++) {
                        if(d == d) {
                              r --                     ;
                              break                  ;
                        }
                }               
      }
      return r                                       ;
}

int check2(int a , int b)
{
      int d = {0} , e = {0} , i , j, r         ;
      for(i = 0 ; a ; a /= 10 , i ++) d = a % 10    ;
      for(i = 0 ; b ; b /= 10 , i ++) e = b % 10    ;
      for(r = 1 , i = 0 ; i < 5 && r ; i ++) {
                for(j = 0 ; j < 5 ; j ++) {
                        if(e == d) {
                              r --                     ;
                              break                  ;
                        }
                }
      }      
      return r                                       ;
}

main(void)
{
      int i , j , m , n                                                                ;
      scanf("%d" , & m)                                                                ;
      for(n = 0 , i = 1000 ; i < 100000 ; i ++) {
                if(check1(i)) {
                        for(j = 1000 ; j < 100000 ; j ++) {
                              if(check1(j) && check2(i , j)) {
                                        if(i % j == 0 && i / j == m) {
                                                printf("%d / %d = %d\n" , i , j , i / j) ;
                                                n ++                                     ;
                                        }
                              }
                        }
                }      
      }
}
      编译、运行实况:
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
12
45792 / 3816 = 12
73548 / 6129 = 12
89532 / 7461 = 12
91584 / 7632 = 12

D:\00.Excise\C>x
3
17469 / 5823 = 3
17496 / 5832 = 3
50382 / 16794 = 3
53082 / 17694 = 3
61749 / 20583 = 3
69174 / 23058 = 3
91746 / 30582 = 3
96174 / 32058 = 3

D:\00.Excise\C>

Danmoits 发表于 2020-11-14 23:04:50

jackz007 发表于 2020-11-14 21:04
会有结果的,需要一点时间和耐心,等等看。

不行啊,输入12后,等了1分钟以上还是什么结果也没有

jackz007 发表于 2020-11-14 23:08:22

本帖最后由 jackz007 于 2020-11-14 23:11 编辑

Danmoits 发表于 2020-11-14 23:04
不行啊,输入12后,等了1分钟以上还是什么结果也没有

       等 3 分钟左右看看呢,我用的电脑可是 10 年前的笔记本。你可以验证一下我得到的结果,特别是输入 3 的时候,看看是否符合条件,这也可以从侧面佐证这个代码是正确可行的。

Danmoits 发表于 2020-11-15 08:27:37

jackz007 发表于 2020-11-14 23:08
等 3 分钟左右看看呢,我用的电脑可是 10 年前的笔记本。你可以验证一下我得到的结果,特别是输 ...

不好意思,提交到平台上必须在20s以内运行完毕,3分钟是不让过的

jackz007 发表于 2020-11-15 11:31:47

本帖最后由 jackz007 于 2020-11-15 13:12 编辑

Danmoits 发表于 2020-11-15 08:27
不好意思,提交到平台上必须在20s以内运行完毕,3分钟是不让过的

      即时完成的版本来了
#include <stdio.h>

int check(int a , int b)
{
      int d = {0} , e = {0} , i , k , r                            ;
      if(a < 100000) for(k = a , i = 0 ; k ; k /= 10 , i ++) e = k % 10 ;
      if(b < 100000) for(k = b , i = 5 ; k ; k /= 10 , i ++) e = k % 10 ;
      for(i = 0 ; i < 10 ; i ++) d] ++                              ;
      for(r = 1 , i = 0 ; i < 10 ; i ++) {
                if(! d) {
                        r --                                                 ;
                        break                                                ;
                }
      }
      return r                                                             ;
}

main(void)
{
      int i , m , n                                                      ;
      scanf("%d" , & n)                                                    ;
      for(m = 0 , i = 1234 ; i * n < 98766 ; i ++) {
                if(check(i , i * n)) {
                        m++                                                ;
                        printf("%d / %d = %d\n" , i * n , i , n)             ;
                }
      }
}

jackz007 发表于 2020-11-15 13:14:30

Danmoits 发表于 2020-11-15 08:27
不好意思,提交到平台上必须在20s以内运行完毕,3分钟是不让过的

      楼主,测试 9 楼的代码,0 等待。

Danmoits 发表于 2020-11-15 15:14:40

本帖最后由 Danmoits 于 2020-11-15 15:18 编辑

jackz007 发表于 2020-11-15 13:14
楼主,测试 9 楼的代码,0 等待。

能麻烦你再加一下注释吗,感谢,对那一层再编辑一下即可

Danmoits 发表于 2020-11-15 19:56:30

jackz007 发表于 2020-11-15 11:31
即时完成的版本来了

大神,注释拜托
页: [1]
查看完整版本: 输出abcde/fghij=x表达式