| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2760 人关注过本帖, 2 人收藏
标题:关于计算ABCDE*F=EDCBA的方法 有没有更好的办法啊 我的代码虽然能计算出 ...
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏(2)
已结贴  问题点数:20 回复次数:12 
关于计算ABCDE*F=EDCBA的方法 有没有更好的办法啊 我的代码虽然能计算出正确的结果 感觉有些笨重呢
程序代码:
#include<stdio.h>

int main()
{
    int i,j,k,tmp1,tmp2,in1,in2;
    int t1[5]={0,0,0,0,0};
    int t2[5]={0,0,0,0,0};
    for(i=10000;i<99999;i++)
    {
       for(j=2;j<10;j++)
       {
           k=i*j;
           if(k>99999) continue;
           tmp1=i;
           tmp2=k;
           in1=0;
           in2=0;
           //对乘数进行拆解  例如把12345拆解成1,2,3,4,5
           while(tmp1>0)
           {
               t1[in1]=tmp1%10;
               tmp1/=10;
               in1++;
           }
           //对乘积进行拆解  例如把12345拆解成1,2,3,4,5
           while(tmp2>0)
           {
               t2[in2]=tmp2%10;
               tmp2/=10;
               in2++;
           }
           if(t1[0]==t2[4] && t1[1]==t2[3] && t1[2]==t2[2] && t1[3]==t2[1] && t1[4]==t2[0])
           {
               if(t1[0]!=t1[1] && t1[0]!=t1[2] && t1[0]!=t1[3] && t1[0]!=t1[4] && t1[0]!=j)
               {
                   if(t1[1]!=t1[2] && t1[1]!=t1[3] && t1[1]!=t1[4] && t1[1]!=j)
                   {
                       if(t1[2]!=t1[3] && t1[2]!=t1[4] && t1[2]!=j)
                       {
                           if(t1[3]!=t1[4] && t1[3]!=j)
                           {
                               if(t1[4]!=j)
                               {
                                 printf("%d*%d=%d\n",i,j,k);
                               }
                           }
                       }
                   }
               }

           }
       }
    }

}
2013-12-10 11:13
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:3 
不错不错   赞一下
站内B版呗,它被我视为简洁大神,虽然我的水平看不懂他的代码

三十年河东,三十年河西,莫欺少年穷!
2013-12-10 11:41
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:3 
for(i=10000;i<99999;i++)  从99999缩小到49999

总有那身价贱的人给作业贴回复完整的代码
2013-12-10 12:29
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:3 
有很多可以优化的

if(k>99999) continue;这个,就可以把contine 改成break了的,因为j++后,得到的数比当前的更大,所以直接继续下一个i++ 就行了

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-12-10 12:48
IceSource
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:37
专家分:139
注 册:2013-12-3
收藏
得分:3 
程序代码:
int main()
{
    int in;        //ABCDE
    int out;    //EDCBA
    int k;        // ?
    int a[5] = {0};        // 各位数字:A B C D E

    for(in=10000; in<=99999; in++)
    {
        out = 0;
        k = 1;
        int i =0;
        int tmp = in;    

        //ABCDE -> EDCBA
        do{
            a[i++] = tmp%10; 
            out = out*10 + (tmp%10);
        }while(0 != (tmp=tmp/10));     
        

        if(!(a[0]^a[1] && a[0]^a[2] && a[0]^a[3] && a[0]^a[4] && a[1]^a[2] && a[1]^a[3] && a[1]^a[4] && a[2]^a[3] a[2]^a[4] && a[3]^a[4]))
            continue;

        while((in*k) < out)
        {
            k++;
        }
        if((in*k) == out)
        {
            printf("%d * %d = %d\n", in, k, out);
        }
    }

    return 0;
}
刚写的,求一起点评。
2013-12-10 12:58
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:3 
程序代码:
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <windows.h>

#define SIZE     5
#define MIN  12345
#define MAX  98765

int judge(int a[], int n, int *_n)
{
    if (0 == n % 10)
        return 1;

    *_n = 0;
    while (n)
    {
        int tmp = n % 10;
        if (a[tmp])    return 1;
        a[tmp] = 1, n /= 10;
        *_n *= 10, *_n += tmp;
    }
    return 0;
}

int main()
{
    int s, a[10];    // s 存储 j 的逆序
    for (int i = 2; i < 10; i++)
    for (int j = MIN; i * j <= MAX; j++)
    {
        for (int k = 0; k < 10; k++)    a[k] = 0;

        s = 0, a[i] = 1;
        if (judge(a, j, &s))    continue;
        if (i * j == s)
        {
            printf("%d * %d = %d\n", j, i, s);
        }
    }
    _getch();
    return 0;
}


[fly]存在即是合理[/fly]
2013-12-10 13:41
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:3 
膜拜。

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2013-12-10 13:55
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:3 
呵呵既然韶志给了这么高的评价,那就参与一下
程序代码:
#include <stdio.h>

void cal(int n, int a, int b)
{
    static int f[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    const int e[] = {1, 10, 100, 1000, 10000};
    int t, i;
    if(n == 5)
    {
        if(!(b % a) && (t = b / a) < 10)
            printf("%d * %d = %d\n", a, t, b);
        return;
    }
    for(i = n; i < 10; i++)
    {
        t = f[n]; f[n] = f[i]; f[i] = t;
        cal(n + 1, a * 10 + f[n], b + f[n] * e[n]);
        t = f[n]; f[n] = f[i]; f[i] = t;
    }
}

int main()
{
    cal(0, 0, 0);
    return 0;
}

重剑无锋,大巧不工
2013-12-10 14:35
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
回复 8楼 beyondyf
欢迎!

三十年河东,三十年河西,莫欺少年穷!
2013-12-10 15:50
一只小狼
Rank: 1
来 自:辽宁沈阳
等 级:新手上路
帖 子:5
专家分:8
注 册:2013-12-2
收藏
得分:3 
#include <stdio.h>

int bijiao(int a[],int b[]){
    int i,j;
    for (i=0,j=4;i<=4,j>=0;i++,j--)
    {
        if(a[i]==b[j])
            if(i==4)
                return 1;
            else
                continue;
        else
            return 0;
            
    }
}

int chai(int t1,int t2){
    int a[5],b[5],i,t;
    for (i=4;i>=0;i--)
    {
        a[i]=t1%10;
        t1=t1/10;
    }
    for (i=4;i>=0;i--)
    {
        b[i]=t2%10;
        t2=t2/10;
    }
    return t=bijiao(a,b);
}

void main(){
    int i=10000,t,j;
    for (;i<=99999;i++)
    {
        for (j=1;j<10;j++)
        {
            t=i*j;
            if(t>99999)
                continue;
            if(chai(i,t))
                printf("%d*%d=%d \n",i,j,t);
        }
    }
}
各路大神来点评一下,本人新手。
2013-12-10 16:00
快速回复:关于计算ABCDE*F=EDCBA的方法 有没有更好的办法啊 我的代码虽然能计 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028106 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved