吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2724|回复: 3
收起左侧

[C&C++ 原创] c语言枚举编程

[复制链接]
luoluoovo 发表于 2019-3-17 00:37
本帖最后由 luoluoovo 于 2019-3-17 00:39 编辑

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

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

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

        }
        list[k++] = num - 1;
}

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

        }


        numslist(a, list[k - 1]);

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

        }
        result[x++] = put/62;

}
  
}
int  main() {
        int result[10] = {0};
        int n;
        scanf_s("%d", &n);
        algorithm(n, result);
        if (result[0]==0)
        {
                printf("没有找到!");
                getchar();
                return 0;
        }
        printf("找到如下:\n");
        for (int i=0; i < 10 && result[i] != 0; i++)
        {
                printf("%d/0%d=%d\n", result[i]*n,result[i],n);
        }
        getchar();
        getchar();
        return 0;
}
截图1552753834.png
截图1552754230.png

免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Jem 发表于 2019-3-17 00:47
刚开始学
hyolyn 发表于 2019-3-17 00:53
 楼主| luoluoovo 发表于 2019-3-17 08:28
hyolyn 发表于 2019-3-17 00:53
goto不推荐使用,鸡肋

好吧,是因为觉得跳出两重循环麻烦。所以写了goto。谢谢指教
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 15:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表