急!哪位高手能给我解答啊!拜托了!

时间:2022-08-30 00:49:23
诸位高手本人是一个C的初学者,现在遇到了一个棘手,不能自己解决的问题,希望路过的高手给我解决一下,最好有源代码,谢谢了!

要求完成下面的表达式
    a b c d e
   +2 0 0 8 5
  ------------
    f g h i j
其中2008表示2008年在北京举办奥运会,
5表示奥运五环,所以合起来20085刚好表示2008奥运。
要求abcdefghij分别表示从0到9的一位数字,而且不允许重复使得上面的加法表达式成立.


最后将所有满足条件的j从小到大连在一起 最后将j输出

怎么编啊?

还有哪位能给小弟说一点学习语言的经验啊,不胜感激!
E-mail:pengzhile@126.com
谢谢!

14 个解决方案

#1


#include <stdio.h>
#include <string.h>
#define MIN 10234
#define MAX 96543
int chanel(int n[],int i);
void output(int a,int b);
int main()
{
int flag[10];
int i,j;
for (i=10234; i<=98765; i++)
{
memset(flag,0,10*sizeof(int));
if (chanel(flag,i))
{
if ( i+20085<=96543 )
{
if ( chanel(flag,i+20085))
{
output(i,i+20085);
}
}
}
}
}

int chanel(int n[],int i)
{
int base=10000;
while (base>0)
{
if ( n[(int)(i/base)]==0 )
{
 n[(int)(i/base)]=1;
}
else
{
return 0;
}
i %= base;
base /= 10;
}
return 1;
}

void output(int a,int b)
{
int base=10000;
char c='a';
while ( base>0 )
{
printf("%c=%d ",c,a/base);
c++;
a %= base;
base /= 10;
}
base = 10000;
while ( base>0 )
{
printf("%c=%d ",c,b/base);
c++;
b %= base;
base /= 10;
}
putchar('\n');
}

#2


output
-------------------------------------------------
a=1 b=4 c=9 d=8 e=2 f=3 g=5 h=0 i=6 j=7
a=2 b=7 c=9 d=5 e=1 f=4 g=8 h=0 i=3 j=6
a=3 b=7 c=9 d=4 e=1 f=5 g=8 h=0 i=2 j=6
a=4 b=1 c=9 d=7 e=3 f=6 g=2 h=0 i=5 j=8
a=5 b=1 c=9 d=6 e=3 f=7 g=2 h=0 i=4 j=8
a=6 b=4 c=9 d=3 e=2 f=8 g=5 h=0 i=1 j=7

#3


帮楼上顶

#4


你有没有少了什么啊?
编译过后能运行,但得出的结果不 能用啊

#5


怎么不能用法?

#6


最后将所有满足条件的j从小到大连在一起 最后将j输出

#7


我昏迷了 我那是打印出所有符合
a~j的组数 没看output吗
你是要交作业吗 看都不看就拿去用了

#8


是这样的,我在玩一个黑客游戏,现在要进入第7关,过的方法我已经知道了 ,只不过要算出J才能继续下去,而你输出的J不行啊

#9


TO :SAMUELKEVIN 你能教我一些学习语言的经验吗?

#10



#include <iostream.h>

bool isRepeated(int xx[10],int n)
{
    int m;
    while(n)
    {
        m=n%10;             
        if( xx[m]!= -1)// 出现了重复的数字
            return true;
        xx[m]=m;
        n=n/10;
    }
    return false;
}

int cacl20085()
{
    int xx[10];
    int i;
    for(i=98765;//最大的和只可能是98765
        i-20085>=12345;//最小的和只可能是12345+20085
        --i)
    {
        for(int k=0;k<10;k++)//数组置标志
        {
            xx[k]=-1;
        }   
        if(!isRepeated(xx,i) && !isRepeated(xx,i-20085))
        {//和i与加数i-20085均在数字位上没有发生重复
            cout<<i-20085<<"+20085="<<i<<endl;
        }
    }
    return 0;
}
int main()
{
    cacl20085();
    return 0;
}

#11


to:a_b_c_abc    cpp1.cpp(31) : error C2059: syntax error : '<'

#12


编译是语法错误啊

#13


输出:
64932+20085=85017
51963+20085=72048
41793+20085=62058
37941+20085=58026
27951+20085=48036
14982+20085=35067

所有j连在一起是667788,与SamuelKevin((曼陀罗)一样,不过贴出晚了,不要给分。

#14


mark

#1


#include <stdio.h>
#include <string.h>
#define MIN 10234
#define MAX 96543
int chanel(int n[],int i);
void output(int a,int b);
int main()
{
int flag[10];
int i,j;
for (i=10234; i<=98765; i++)
{
memset(flag,0,10*sizeof(int));
if (chanel(flag,i))
{
if ( i+20085<=96543 )
{
if ( chanel(flag,i+20085))
{
output(i,i+20085);
}
}
}
}
}

int chanel(int n[],int i)
{
int base=10000;
while (base>0)
{
if ( n[(int)(i/base)]==0 )
{
 n[(int)(i/base)]=1;
}
else
{
return 0;
}
i %= base;
base /= 10;
}
return 1;
}

void output(int a,int b)
{
int base=10000;
char c='a';
while ( base>0 )
{
printf("%c=%d ",c,a/base);
c++;
a %= base;
base /= 10;
}
base = 10000;
while ( base>0 )
{
printf("%c=%d ",c,b/base);
c++;
b %= base;
base /= 10;
}
putchar('\n');
}

#2


output
-------------------------------------------------
a=1 b=4 c=9 d=8 e=2 f=3 g=5 h=0 i=6 j=7
a=2 b=7 c=9 d=5 e=1 f=4 g=8 h=0 i=3 j=6
a=3 b=7 c=9 d=4 e=1 f=5 g=8 h=0 i=2 j=6
a=4 b=1 c=9 d=7 e=3 f=6 g=2 h=0 i=5 j=8
a=5 b=1 c=9 d=6 e=3 f=7 g=2 h=0 i=4 j=8
a=6 b=4 c=9 d=3 e=2 f=8 g=5 h=0 i=1 j=7

#3


帮楼上顶

#4


你有没有少了什么啊?
编译过后能运行,但得出的结果不 能用啊

#5


怎么不能用法?

#6


最后将所有满足条件的j从小到大连在一起 最后将j输出

#7


我昏迷了 我那是打印出所有符合
a~j的组数 没看output吗
你是要交作业吗 看都不看就拿去用了

#8


是这样的,我在玩一个黑客游戏,现在要进入第7关,过的方法我已经知道了 ,只不过要算出J才能继续下去,而你输出的J不行啊

#9


TO :SAMUELKEVIN 你能教我一些学习语言的经验吗?

#10



#include <iostream.h>

bool isRepeated(int xx[10],int n)
{
    int m;
    while(n)
    {
        m=n%10;             
        if( xx[m]!= -1)// 出现了重复的数字
            return true;
        xx[m]=m;
        n=n/10;
    }
    return false;
}

int cacl20085()
{
    int xx[10];
    int i;
    for(i=98765;//最大的和只可能是98765
        i-20085>=12345;//最小的和只可能是12345+20085
        --i)
    {
        for(int k=0;k<10;k++)//数组置标志
        {
            xx[k]=-1;
        }   
        if(!isRepeated(xx,i) && !isRepeated(xx,i-20085))
        {//和i与加数i-20085均在数字位上没有发生重复
            cout<<i-20085<<"+20085="<<i<<endl;
        }
    }
    return 0;
}
int main()
{
    cacl20085();
    return 0;
}

#11


to:a_b_c_abc    cpp1.cpp(31) : error C2059: syntax error : '<'

#12


编译是语法错误啊

#13


输出:
64932+20085=85017
51963+20085=72048
41793+20085=62058
37941+20085=58026
27951+20085=48036
14982+20085=35067

所有j连在一起是667788,与SamuelKevin((曼陀罗)一样,不过贴出晚了,不要给分。

#14


mark