标题:菜鸟请教一个问题:关于XXXX*X=XXXX,这9个数字都不相同
只看楼主
ljstranger
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-3-2
 问题点数:0 回复次数:14 
菜鸟请教一个问题:关于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 数字 源代码 等号 
2005-03-03 16:03
ljstranger
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-3-2
得分:0 
当少了if((g*f)==a)这句时,每几个输出数字中只有一个是正确的,加了这一句,就好了,但是我总感觉到好像思考问题时出了问题,
PS:还是a/f的时候产生了小数位(比如:g=a/f=1043.7),int格式去掉了小数(g=1043),得到一个g(1043),然后当输出这个g的时候数字就不对了(1043*7=9826)???
2005-03-03 16:12
lzm0915
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-3-3
得分:0 
我想应该会有更简单的方法
现在只看出一些小问题
比如说e可以简单的表示为e=a%10,利用好%这个符号可以简化表达式
还有f可以从2开始等。
2005-03-03 20:52
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 
简单点,九个for也比你这个强.

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-03-03 23:27
kaikai
Rank: 1
等 级:新手上路
帖 子:236
专家分:0
注 册:2005-1-7
得分:0 
5个for大概也好一些吧

Have you visit acm.tongji. lately?
2005-03-03 23:35
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 
好象不一定

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-03-03 23:37
kaikai
Rank: 1
等 级:新手上路
帖 子:236
专家分:0
注 册:2005-1-7
得分:0 
不如9个的?还是不如楼主的?

Have you visit acm.tongji. lately?
2005-03-03 23:39
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 
不如9个

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-03-03 23:46
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 
你用5个for最后还得再去判其结果,是个4位数且与前5个没有相同.用9个for只要等式相等即可。速度可能还是9个的快

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-03-03 23:51
kaikai
Rank: 1
等 级:新手上路
帖 子:236
专家分:0
注 册:2005-1-7
得分:0 

是不是很丑陋了? #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编辑过]


Have you visit acm.tongji. lately?
2005-03-03 23:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-12763-1-1.html




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

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