当前位置: 代码迷 >> C语言 >> 菜鸟请教一个问题:关于XXXX*X=XXXX,这9个数字都不相同
  详细解决方案

菜鸟请教一个问题:关于XXXX*X=XXXX,这9个数字都不相同

热度:379   发布时间:2005-03-03 16:03:00.0
菜鸟请教一个问题:关于XXXX*X=XXXX,这9个数字都不相同
刚开始学C语言,偶然有个猜数字的题目,一个四位数*一个数=一个四位数,这9个数字都不相同。
我当时的想法是先算出等号后面的四位数,再除以一个不重复的一个数字,得到等号前的数。
结果也实现了,只是觉得好像比较冗长,不知道各位高手有什么意见,新手发问,不要鄙视我。。
源代码如下:
#include <stdio.h>
main()
{
int a,b,c,d,e,f,g,h,i,j,k;
//a为等号后面的四位数,b,c,d,e为千百十个位,g位等号后的数,h,i,j,k为g的千百十个位,f为乘  数
for(a=1000;a<10000;a++)
{
  b=a/1000;
  c=(a-1000*b)/100;
  d=(a-b*1000-c*100)/10;
  e=a-b*1000-c*100-d*10;
  if((b!=c)&&(b!=d)&&(b!=e)&&(c!=d)&&(c!=e)&&(d!=e))
  {
   
  for(f=1;f<10;f++)
   {
    if((f!=b)&&(f!=c)&&(f!=d)&&(f!=e))
    {
         g=a/f;
      h=g/1000;
      i=(g-1000*h)/100;
      j=(g-1000*h-100*i)/10;
      k=g-1000*h-100*i-10*j;
      if((1000<g)&&(g<9999)&&(g!=a))
      {
     
       if((b!=h)&&(b!=i)&&(b!=j)&&(b!=k)&&(c!=h)&&(c!=i)&&(c!=j)&&(c!=k)&&(d!=h)&&(d!=i)&&(d!=j)&&(d!=k)&&(e!=h)&&(e!=i)&&(e!=j)&&(e!=k)&&(f!=h)&&(f!=i)&&(f!=j)&&(f!=k)&&(h!=i)&&(h!=j)&&(h!=k)&&(i!=j)&&(i!=k)&&(j!=k))
                       
       {
        if((g*f)==a)
        {
        printf("%d*%d=%d\n",g,f,a);
        };
       };
      };
    };
   };
  };
};
return 0;
}
搜索更多相关的解决方案: XXXX  数字  源代码  等号  

----------------解决方案--------------------------------------------------------
当少了if((g*f)==a)这句时,每几个输出数字中只有一个是正确的,加了这一句,就好了,但是我总感觉到好像思考问题时出了问题,
PS:还是a/f的时候产生了小数位(比如:g=a/f=1043.7),int格式去掉了小数(g=1043),得到一个g(1043),然后当输出这个g的时候数字就不对了(1043*7=9826)???
----------------解决方案--------------------------------------------------------
我想应该会有更简单的方法
现在只看出一些小问题
比如说e可以简单的表示为e=a%10,利用好%这个符号可以简化表达式
还有f可以从2开始等。
----------------解决方案--------------------------------------------------------
简单点,九个for也比你这个强.
----------------解决方案--------------------------------------------------------
5个for大概也好一些吧
----------------解决方案--------------------------------------------------------
好象不一定
----------------解决方案--------------------------------------------------------
不如9个的?还是不如楼主的?
----------------解决方案--------------------------------------------------------
不如9个
----------------解决方案--------------------------------------------------------
你用5个for最后还得再去判其结果,是个4位数且与前5个没有相同.用9个for只要等式相等即可。速度可能还是9个的快
----------------解决方案--------------------------------------------------------

是不是很丑陋了? #include <stdio.h> #include <memory.h>

int used[10];

int main() { int a,b,c,d,e,t; memset(used,0,sizeof(used)); for (a=1;a<=9;a++) { used[a]=1; for (b=0;b<=9;b++) { if (used[b]) continue; used[b]=1; for (c=0;c<=9;c++) { if (used[c]) continue; used[c]=1; for (d=0;d<=9;d++) { if (used[d]) continue; used[d]=1; for (e=2;e<=9;e++) { if (used[e]) continue; used[e]=1; t=(((a*10+b)*10+c)*10+d)*e; if (t<=9876 && !used[t%10] && !used[t/10%10] && !used[t/100%10] && !used[t/1000%10]) { printf("%d%d%d%d*%d=%d\n",a,b,c,d,e,t); return 0; } used[e]=0; } used[d]=0; } used[c]=0; } used[b]=0; } used[a]=0; } return 0; } /// 最近很模糊啊,又写错了...

[此贴子已经被作者于2005-3-4 0:02:29编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案