QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: BartonZhang

大家来用JAVA来算这个啊

[复制链接]
发表于 2003-7-18 12:28:42 | 显示全部楼层
wsm, 那个 haha ??
回复

使用道具 举报

发表于 2003-7-18 12:41:57 | 显示全部楼层
表示算出了一个结果阿 当然要
回复

使用道具 举报

发表于 2003-7-18 17:12:30 | 显示全部楼层
要求1到8应该只有两个解
回复

使用道具 举报

发表于 2003-7-18 17:14:27 | 显示全部楼层
[quote:baae308bbc="wsm"]楼上的也是按0-9算得吧 能不能吧结果列一下对比验证以下 如果我们的一样 可靠性就大一点了 现在也不知道是否有遗漏的阿
另外 这么纯的编程贴姿 居然流落在水区...[/quote]

不是0-9,是1-8只有两个解
(3) * (5)((2)=(1)(7)(4)(6)
(6) * (4)(5)(3)=(2)(7)(1)(
回复

使用道具 举报

发表于 2003-7-19 13:09:13 | 显示全部楼层
#include<stdio.h>

int check(int,int,int);
main()
{
        int i,j,k;


        for(i=2;i<=8;i++)
                for(j=123;j<=876;j++)
                        for(k=1234;k<=8765;k++)
                                if(check(i,j,k)&&(i*j==k))
                                        printf("%d*%d=%d\n",i,j,k);
}

int check(int i,int j,int k)
{
        long itslong=k*10000+j*10+i;
        int x[8],a,o,m;
        for(a=0;a<=7;a++)
        {
                x[a]=itslong%10;
                itslong/=10;
        }
        for(a=1;a<=8;a++)
        {
                m=0;
                for(o=0;o<=7;o++)
                        if(x[o]==a)
                                m=1;
                if(m==0)
                        break;
        }
        return m;
}
很慢
回复

使用道具 举报

发表于 2003-7-19 13:29:31 | 显示全部楼层
[quote:1900743fde="gexc"]#include<stdio.h>

int check(int,int,int);
main()
{
        int i,j,k;


        for(i=2;i<=8;i++)
                for(j=123;j<=876;j++)
                        for(k=1234;k<=8765;k++)
                                if(check(i,j,k)&&(i*j==k))
                                        printf("%d*%d=%d\n",i,j,k);
}

int check(int i,int j,int k)
{
        long itslong=k*10000+j*10+i;
        int x[8],a,o,m;
        for(a=0;a<=7;a++)
        {
                x[a]=itslong%10;
                itslong/=10;
        }
        for(a=1;a<=8;a++)
        {
                m=0;
                for(o=0;o<=7;o++)
                        if(x[o]==a)
                                m=1;
                if(m==0)
                        break;
        }
        return m;
}
很慢[/quote]

循环次数太多了
回复

使用道具 举报

发表于 2003-7-19 15:15:54 | 显示全部楼层
WSM 有点粗心了,有重复数字.
我算出的答案只有两个
3 * 582 = 1746
6 * 453 = 2718

下面是我用python写出来的. 不过没有什么层次,但做这些题目,还是可以的,在java中也类似.  
假如不太介意速度不过这里也不会太有问题 ,我觉得我的做法很直观. 用一个1位数X3位数.
得出一个4位数, 然后分别把它们转为字符型.然后对每个字符计数(我用了hash datatype来实现),java中完全可以这样做.
[code:1]
for i in range(2,8):
    for a in range(101,999):
        c= i*a
        if c>1000 and c<10000:
            Dic={'1':0,
               '2':0,
               '3':0,
               '4':0,
               '5':0,
               '6':0,
               '7':0,
               '8':0,
               }
            sC=str(c)
            sA=str(a)
            sI=str(i)
            Dic[sI]=Dic[sI]+1
            iLegal = 0

            
               
               
            if iLegal==1:
                continue
            
            for digi in sA:
                if digi is '0':
                    iLegal=1
                    break
                if digi is '9':
                    iLegal=1
                    break
                Dic[digi]=Dic[digi] + 1
                if Dic[digi] > 1:
                    iLegal=1
                    break

            for digi in sC:
                if digi is '0':
                    iLegal=1
                    break
                if digi is '9':
                    iLegal=1
                    break
                Dic[digi]=Dic[digi] + 1
                if Dic[digi] > 1:
                    iLegal=1
                    break
               
            if iLegal==1:
                continue
            else:
                print sI + " * " +sA +" = " + sC[/code:1]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 11:48 , Processed in 0.070897 second(s), 13 queries .

© 2021 Powered by Discuz! X3.5.

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