| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1745 人关注过本帖
标题:一个入门必做的题,我做了 却不知道错在那里??
只看楼主 加入收藏
wwbbqq
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-10-10
收藏
 问题点数:0 回复次数:19 
一个入门必做的题,我做了 却不知道错在那里??
1.  给定等式    A B C D E     其中每个字母代表一个数字,且不同数字对应不
                    D F G     同字母。编程求出这些数字并且打出这个数字的
             +      D F G     算术计算竖式。

             ───────

                X Y Z D E
这是我写的源程序,  我用的是穷举法。
#include<stdio.h>
void main()
{
    int A,B,C,D,E,F,G,X,Y,Z;
    for(A=0;A<=9;A++)
        for(B=0;B<=9;B++)if(A==B) continue;
            for(C=0;C<=9;C++) if(B==C||A==C) continue;
                for(D=0;D<=9;D++) if(C==D||B==D||A==D) continue;
                    for(E=0;E<=9;E++)  if(A==E||B==E||C==E||D==E) continue;
                        for(F=0;F<=9;F++)  if(A==F||B==F||C==F||D==F||E==F) continue;
                            for(G=0;G<=9;G++)  if(A==G||B==G||C==G||D==G||E==G||F==G) continue;
                               for(X=0;X<=9;X++)  if(A==X||B==X||C==X||D==X||E==X||F==X||G==X) continue;
                                  for(Y=0;Y<=9;Y++)  if(A==Y||B==Y||C==Y||D==Y||E==Y||F==Y||G==Y||X==Y) continue;
                                     for(Z=0;Z<=9;Z++)  if(A==Z||B==Z||C==Z||D==Z||E==Z||F==Z||G==Z||X==Z||Y==Z) continue;
                                        if(A*10000+B*1000+C*100+D*10+E+2*(Z*100+F*10+G)==X*10000+Y*1000+Z*100+D*10+E)
                                        {
                                          
                                          printf("A=%dB=%dC=%dD=%dE=%dF=%dG=%dX=%dY=%dZ=%d",A,B,C,D,E,F,G,X,Y,Z);
                                        }
                    

}
18楼的兄弟
用递归写了一个正确的程序:
#include "stdio.h"
#define TRUE  1
#define FALSE 0

typedef unsigned char boolean;

boolean Judge(unsigned int *p[10])
{
    int c2,c3,c4,c5;

    c2=(*p[4]+*p[6]*2)/10;
    c3=(*p[3]+*p[5]*2+c2)/10;
    c4=(*p[2]+*p[3]*2+c3)/10;
    c5=(*p[1]+c4)/10;

    if(0 != (*p[6]*2)%10)
    return FALSE;

    if(0 != (*p[5]*2+c2)%10)
    return FALSE;

    if(*p[9] != (*p[2]+*p[3]*2+c3)%10)
    return FALSE;

    if(*p[8] != (*p[1]+c4)%10)
    return FALSE;

    if(*p[7] != (*p[0]+c5))
    return FALSE;

    return TRUE;
}

void guess(unsigned int n,unsigned int *p[10])
{
    unsigned int i,j,flag;
    if(0 == n)
    {
        if(TRUE == Judge(p))
        {
            printf("**************************************\n");
            printf("A\tB\tC\tD\tE\t\n");
            printf("%d\t%d\t%d\t%d\t%d\n",*p[0],*p[1],*p[2],*p[3],*p[4]);
            printf("F\tG\tX\tY\tZ\t\n");
            printf("%d\t%d\t%d\t%d\t%d\n",*p[5],*p[6],*p[7],*p[8],*p[9]);
            printf("**************************************\n");
        }
    }
    else
    {
        for(i=0;i<10;i++)
        {
            flag=TRUE;
            for(j=9;j>=n;j--)
            {
                if(i == *p[j])
                {
                    flag = FALSE;
                    break;
                }
            }
            if(FALSE == flag)
                continue;
            *p[n-1]=i;
            guess(n-1,p);
            
        }
    }
}

int main()
{
    unsigned int A,B,C,D,E,F,G,X,Y,Z;
    unsigned int *p[10];

    p[0]=&A;p[1]=&B;p[2]=&C;p[3]=&D;p[4]=&E;
    p[5]=&F;p[6]=&G;p[7]=&X;p[8]=&Y;p[9]=&Z;

    guess(10,p);
    getch();
}

[[it] 本帖最后由 wwbbqq 于 2008-4-15 20:39 编辑 [/it]]
搜索更多相关主题的帖子: 入门 
2008-04-14 10:54
SNAKEQX
Rank: 1
等 级:新手上路
帖 子:112
专家分:3
注 册:2006-4-11
收藏
得分:0 
看不大懂题目。。。。是不是要用ASCII码来做啊?
2008-04-14 11:14
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
#include<stdio.h>
void main()
{
    int A,B,C,D,E,F,G,X,Y,Z;
    for(A=0;A<=9;A++)
        for(B=0;B<=9;B++)if(A==B) continue;
            for(C=0;C<=9;C++) if(B==C||A==C) continue;
                for(D=0;D<=9;D++) if(C==D||B==D||A==D) continue;
                    for(E=0;E<=9;E++)  if(A==E||B==E||C==E||D==E) continue;
                        for(F=0;F<=9;F++)  if(A==F||B==F||C==F||D==F||E==F) continue;
                            for(G=0;G<=9;G++)  if(A==G||B==G||C==G||D==G||E==G||F==G) continue;
                               for(X=0;X<=9;X++)  if(A==X||B==X||C==X||D==X||E==X||F==X||G==X) continue;
                                  for(Y=0;Y<=9;Y++)  if(A==Y||B==Y||C==Y||D==Y||E==Y||F==Y||G==Y||X==Y) continue;
                                     for(Z=0;Z<=9;Z++)  if(A==Z||B==Z||C==Z||D==Z||E==Z||F==Z||G==Z||X==Z||Y==Z) continue;
                                        if(A*10000+B*1000+C*100+D*10+E+2*(Z*100+F*10+G)==X*10000+Y*1000+Z*100+D*10+E)
                                        {
                                          
                                          printf("A=%dB=%dC=%dD=%dE=%dF=%dG=%dX=%dY=%dZ=%d",A,B,C,D,E,F,G,X,Y,Z);
                                        }
                    

}
红标记错了.很明显啊!至于程序有没有其他的错误我还没有细看呢.

♂ 死后定当长眠,生前何须久睡。♀
2008-04-14 11:55
wwbbqq
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-10-10
收藏
得分:0 
不是用ASCII码做
每个字母代表一个数字,且不同数字对应不同字母
2008-04-14 12:00
wwbbqq
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-10-10
收藏
得分:0 
把红的改的一样的
还是没有输出结果
2008-04-14 12:07
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
嵌套超过5层的循环的代码,那些代码真是会让人无语的。。。

" border="0" />
2008-04-14 12:33
now
Rank: 1
来 自:广州
等 级:新手上路
帖 子:544
专家分:0
注 册:2007-11-9
收藏
得分:0 
LZ有没有考虑过复杂度?

GIS
Geographic Information System
你在哪里?——》你的坐标?
2008-04-14 13:04
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
你少了很多个花括号~~~~~~~~~

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-04-14 13:50
闪闪4521
Rank: 1
等 级:新手上路
帖 子:196
专家分:0
注 册:2007-11-30
收藏
得分:0 
真是令人疯狂的程序....
2008-04-14 13:55
tanyongfei520
Rank: 1
来 自:皖南陵
等 级:新手上路
帖 子:34
专家分:0
注 册:2008-2-24
收藏
得分:0 
这是必做的吗,我怎么没见过,
2008-04-14 18:08
快速回复:一个入门必做的题,我做了 却不知道错在那里??
数据加载中...
 
   



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

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