luoluoovo 发表于 2019-3-17 00:37

c语言枚举编程

本帖最后由 luoluoovo 于 2019-3-17 00:39 编辑

今天看了一个求助帖,然后我试着写出来了。题目在最后面。
代码有点乱,学C语言大概有1个月吧,有什么可以改进的大家多给点意见。
思路就是先遍历被除数 (4位数的不重复数字,且不包含0),归到一个数组中。
再从数组中拿出来乘上n。
在它们寻找当中寻找有5位数的不重复数字(不包含0),在和被除数每位进行比较,都不相同则符合条件。
原帖 https://www.52pojie.cn/thread-901040-1-1.html
https://www.52pojie.cn/forum.php?mod=image&aid=1428161&size=300x300&key=e8f779d373ec0b16&nocache=yes&type=贴图错误,请阅读“贴图帮助”。
#include <stdio.h>

void numslist(int c[],long temp) {
      int i = 0;
      do {
                c = temp % 10;
      } while (temp = temp / 10);
}

void algorithm(int n,int result[]) {
      int x=0;
      int list = { 0 }, k = 0;
      int a;
      int c;
      int num = 1234;
      long put;
      
a:while (num <= 9876)
{
      numslist(a, num);
      num += 1;
      for (int i = 0; i < 4; i++)
      {
                if (a != 0)
                {
                        switch (i)
                        {
                        case 0:if (a == a) goto a;
                        case 1:if (a == a) goto a;
                        case 2:if (a == a) goto a;
                        }
                }

      }
      list = num - 1;
}

k = 0;
b:while (list != 0 && n * list <= 98765 && n * list >= 12345)
{
      put = n * list;
      numslist(c, put);
      k++;
      for (int i = 0; i < 5; i++)
      {
                if (c != 0)
                {
                        switch (i)
                        {
                        case 0:if (c == c)goto b;
                        case 1:if (c == c)goto b;
                        case 2:if (c == c)goto b;
                        case 3:if (c == c)goto b;
                        }
                }
                else
                        goto b;

      }


      numslist(a, list);

      for (int i = 0; i < 5; i++)
      {
                for (int j = 0; j < 4; j++)
                {
                        if (c == a)
                              goto b;
                }

      }
      result = put/62;

}

}
intmain() {
      int result = {0};
      int n;
      scanf_s("%d", &n);
      algorithm(n, result);
      if (result==0)
      {
                printf("没有找到!");
                getchar();
                return 0;
      }
      printf("找到如下:\n");
      for (int i=0; i < 10 && result != 0; i++)
      {
                printf("%d/0%d=%d\n", result*n,result,n);
      }
      getchar();
      getchar();
      return 0;
}

Jem 发表于 2019-3-17 00:47

刚开始学

hyolyn 发表于 2019-3-17 00:53

goto不推荐使用,鸡肋

luoluoovo 发表于 2019-3-17 08:28

hyolyn 发表于 2019-3-17 00:53
goto不推荐使用,鸡肋

好吧,是因为觉得跳出两重循环麻烦。所以写了goto。谢谢指教
页: [1]
查看完整版本: c语言枚举编程