求解:华为一道面试题

afei0514 2007-09-07 01:44:44
一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来,谢谢!希望有代码,我不知道如何下笔!
...全文
2326 64 打赏 收藏 转发到动态 举报
写回复
用AI写文章
64 条回复
切换为时间正序
请发表友善的回复…
发表回复
afei0514 2008-04-14
  • 打赏
  • 举报
回复
谢谢各位这么热心,开始只给了20分,没有给分的对不起。
relishou 2007-09-13
  • 打赏
  • 举报
回复
int main()
{
int a,b,c,d,e,num;
for(int i=10001;i<33333;i++)
{
e=i%10;
d=i/10%10;
c=i/100%10;
b=i/1000%10;
a=i/10000;
if((i*4==(e*10000+d*1000+c*100+b*10+a))&(a!=b)&(b!=c)&(c!=d)&(d!=e))
{num=i;
cout<<"The number is "<<num<<"\n";
break;}
}
return 0;
}
diyemei 2007-09-13
  • 打赏
  • 举报
回复
#include <iostream>
#include <cstdlib>

int main()
{
int A,B,C,D,E;
int i,j;
for(A=1; A<10;A++)
for(B=0;B!=A&&B<10;B++)
for(C=0;C!=B&&C!=A&&C<10;C++)
for(D=0;D!=C&&D!=B&&D!=A&&D<10;D++)
for(E=1;E!=D&&E!=C&&E!=B&&E!=A&&E<10;E++)
{
i = 4 * (10000 * A + 1000 * B + 100 * C + 10 * D + E);
j = 10000 * E + 1000 * D + 100 * C + 10 * B + A;
if(i == j)printf("%d%d%d%d%d\n",A,B,C,D,E);
}
system("pause");
return 0;
}

我写的好象得不出结果???
怎么回事情啊?
我用的是DEV-CPP
xkw365 2007-09-13
  • 打赏
  • 举报
回复
这个没难度,试试那个去:http://community.csdn.net/Expert/topic/5756/5756076.xml?temp=.2979853

^_^
czk037 2007-09-12
  • 打赏
  • 举报
回复
看得都眼花了。。。
都是牛人。。。
endofhero 2007-09-12
  • 打赏
  • 举报
回复
留名
clxye 2007-09-12
  • 打赏
  • 举报
回复
能推理出来,真是佩服。
我也觉得这应该是考验一个人的遇事的分析和推理能力。
yixiao386 2007-09-12
  • 打赏
  • 举报
回复

我想到的也是这个方法
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
int A = 2, B, C, D, E = 8;
long int temp1, temp2;

for(B = 0; B <= 9; B++)
{
if((B != A) && (B != E))
{
for(C = 0; C <= 9; C++)
{
if((C != A) && (C != B) && (C != E))
{
for(D = 0; D <= 9; D++)
{
if((D != A) && (D != B) && (D != C) && (D != E))
{
temp1 = A * 10000 + B * 1000 + C * 100 + D * 10 + E;
temp2 = E * 10000 + D * 1000 + C * 100 + B * 10 + A;
if((temp1 * 4) == temp2)
cout << temp1 << endl;
}
}
}
}
}

}
system("pause");

return 0;
}
manmanlai 2007-09-12
  • 打赏
  • 举报
回复
part 1 + part 2 + part 3
------------------------
Output
Enter Count:5 <-----------------输入总共有多少位
Enter Multiplicator:4 <---------输入乘数是多少
X-1:1, 2,
X-2:4, 8,
X-3:2,
X-4:8,
X-Number:20008
X-5:0, 1, 2,
X-6:0, 1,
X-7:2, 7,
X-8:7,
X-Number:21078

X-Number is:21978
21978 X 4 = 87912
--------------------------
请给分,谢谢
diyemei 2007-09-12
  • 打赏
  • 举报
回复
#include <iostream>
#include <cstdlib>

int main()
{
int A,B,C,D,E;
int i,j;
for(A=1; A<10;A++)
for(B=0;B!=A&&B<10;B++)
for(C=0;C!=B&&C!=A&&C<10;C++)
for(D=0;D!=C&&D!=B&&D!=A&&D<10;D++)
for(E=1;E!=D&&E!=C&&E!=B&&E!=A&&E<10;E++)
{
i = 4 * (10000 * A + 1000 * B + 100 * C + 10 * D + E);
j = 10000 * E + 1000 * D + 100 * C + 10 * B + A;
if(i == j)printf("%d%d%d%d%d\n",A,B,C,D,E);
}
system("pause");
return 0;
}

我写的好象得不出结果???
怎么回事情啊?
我用的是DEV-CPP
manmanlai 2007-09-12
  • 打赏
  • 举报
回复
//更新組合,將以求出的數字與可能存在的數字集合進行對比,將重復的數字去除
int updataNoRepeatNumber(int Number, int Count , char *DigitList, int time)
{
char *tmpDig = (char *)malloc(strlen(DigitList) + 1024);
char *tmpOldDig = (char *)malloc(Count + 1024);
strcpy(tmpDig, DigitList);
memset(DigitList, 0, strlen(DigitList));
memset(tmpOldDig, 0, Count + 1024);
int count = 0;
for(int i = 0; i < 2 *time; i++)
{
int tmpSourInt = 0;
char tmp[2];
tmp[1] = '\0';
if(i < time)
{
tmpSourInt = Number / (int)pow(10, Count -1 - i);
Number -= tmpSourInt * (int)pow(10, Count -1 -i);
}
else
{
if(Number < 10)
{
tmpSourInt = Number;
i = 2* time;
}
else
{
tmpSourInt = Number / (int)pow(10, i - 1);
}
Number -= tmpSourInt * (int)pow(10, i - 1);
}
itoa(tmpSourInt, tmp, 10);
strcat(tmpOldDig, tmp);
}
for(int i = 0; i < (int)strlen(tmpDig); i++)
{
char tmpChar[2];
tmpChar[1] = '\0';
tmpChar[0] = tmpDig[i];
if(strstr(tmpOldDig, tmpChar) == NULL)
{
strcat(DigitList, tmpChar);
count++;
}
}
free(tmpDig);
free(tmpOldDig);
return count;
}
//解析出另一組可能性組合中能確定的數字
int parseOtherDigit(int MultNumber, int Number, char * DigitList, char *OtherDigitList, int time)
{
char *tmpDigitList = (char *)malloc(strlen(DigitList) + 1024);
memset(tmpDigitList, 0, strlen(DigitList) + 1024);
strcpy(tmpDigitList, DigitList);
memset(DigitList, 0, strlen(DigitList));
int digitNumber = Number % 10;
char tmp[2];
int tmpInt = 0;
int tmpDigit = 0;
int count = 0;
bool isRight = false;
tmp[1] = '\0';
for(int i = 0; i < (int)strlen(tmpDigitList); i++)
{
tmp[0] = tmpDigitList[i];
tmpInt = atoi(tmp);
for(int j = 0; j < 10; j++)
{
tmpDigit = (j*4 + 3)%10;
if(tmpDigit == tmpInt)
{
char tmpChar[10];
itoa(j, tmpChar, 10);
strcat(OtherDigitList, tmpChar);
isRight = true;
count ++;
}
}
if(isRight)
{
strcat(DigitList, tmp);
}
}
free(tmpDigitList);
return count;
}
//------------------part 3
manmanlai 2007-09-12
  • 打赏
  • 举报
回复
//解析最後一位
memset(Digit, 0, 11);
if(Count % 2 != 0)//如果是奇數位
{
index = Count /2;//前一位
int tmpDigit = (Number / (int)pow(10, index-1))%10;
for(int i = 0; i < 10; i++)
{
if((i * MultNumber + (Count * tmpDigit )/10)%10 == i)
{
char tmpChar[10];
itoa(i, tmpChar, 10);
strcat(Digit, tmpChar);
}
}
}
tmp[0] = Digit[0];
Number += atoi(tmp) * (int)pow(10, Count%2 + 1);
if(!isSuccess)
{
return 0;//無解
}
return Number;
}

//解析出沒有進位的情況
//e.g. 2*4 = 8 1*4 = 4
//Not!!!! 3*4 =12 4 * 4 = 16
int parseDigit(int MultNumber, char *DigitList, bool isFirst)
{
int count = 0;
int i = 0;
if(isFirst)
{
i = 1;
}
for(i; i < 10; i++)
{
int tenDigit = (i * MultNumber)/10;
if(tenDigit == 0)
{
char tmp[10];
itoa(i, tmp, 10);
strcat(DigitList, tmp);
count ++;
}
}
return count;
}

//解析出另一組可能性
//因爲該算法是每次確定首尾2組數字,故需通過一組可能確定另一組可能
int parseOtherPossb(int MultNumber, char *otherDigitList, char *DigitList)
{
int count = 0;
for(int i = 0; i < (int)strlen(DigitList); i++)
{
char tmp[2];
tmp[1] = '\0';
tmp[0] = DigitList[i];
int Digit = atoi(tmp);
Digit *= MultNumber;
strcpy(tmp, itoa(Digit, tmp, 10));
strcat(otherDigitList, tmp);
count ++;
}
return count;
}

//解析出只有十位的集合
int parseSingleMedian(int MultNumber, char *DigitList, char *otherDigitList)
{
int count = 0;
char tmpOther[2];
char tmpDigit[2];
tmpOther[1] = '\0';
tmpDigit[1] = '\0';

char *tmpDigitList = (char *)malloc(strlen(DigitList)+1024);
memset(tmpDigitList, 0, strlen(DigitList + 1024));
strcpy(tmpDigitList, DigitList);
memset(DigitList, 0, strlen(DigitList));

char *tmpOtherList = (char *)malloc(strlen(otherDigitList)+1024);
memset(tmpOtherList, 0, strlen(otherDigitList)+1024);
strcpy(tmpOtherList, otherDigitList);
memset(otherDigitList, 0, strlen(otherDigitList));

for(int i = 0; i < (int)strlen(tmpOtherList); i++)
{
tmpOther[0] = tmpOtherList[i];
tmpDigit[0] = tmpDigitList[i];
if((atoi(tmpOther) * MultNumber)%10 == atoi(tmpDigit))
{
strcat(otherDigitList, tmpOther);
strcat(DigitList, tmpDigit);
count++;
}
}
free(tmpDigitList);
free(tmpOtherList);
return count;
}
//---------------------part 2
manmanlai 2007-09-12
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "string.h"
#include "math.h"

int logicParse(int Count, int MultNumber);
int parseDigit(int MultNumber, char *DigitList, bool isFirst = false);
int parseOtherPossb(int MultNumber, char *otherDigitList, char *DigitList);
int parseSingleMedian(int MultNumber, char *DigitList, char *otherDigitList);
int updataNoRepeatNumber(int Number, int Count, char *DigitList, int time);
int parseOtherDigit(int MultNumber, int Number, char * DigitList, char *OtherDigitList, int time);

int main()
{
char *Number = (char *)malloc(512);
int Count = 0;
int Xnumber;
int MultNumber = 0;
int errorCode = 0;

loop:memset(Number, 0, 512);
printf("Enter Count:");
fgets(Number, 64, stdin);
Count = atoi(Number);

printf("Enter Multiplicator:");
fgets(Number, 10, stdin);
MultNumber = atoi(Number);
errorCode = 0;
if((Count == 0)||(MultNumber == 0))
{
printf("Enter error\n");
errorCode = 1;
}
if(Count > 9)
{
printf("Enter error\n");
errorCode = 1;
}
if(errorCode == 0)
{
Xnumber = logicParse(Count, MultNumber);
printf("\nX-Number is:%d\n", Xnumber);
printf("%d X 4 = %d\n", Xnumber, Xnumber*4);
}
getchar();
goto loop;
free(Number);
return errorCode;
}

//解析出數字,如果返回0 表示無解
int logicParse(int Count, int MultNumber)
{
int Number = (int)pow(10, Count -1);
int index = 0;
char tmp[2];
char Digit[11];
char otherDigit[11];
char endDigitList[11];
bool isSuccess = true;
memset(otherDigit, 0, 11);
memset(Digit, 0, 11);
memset(endDigitList, 0, 11);
tmp[1] = '\0';
if((MultNumber == 1)||(MultNumber == 0))
{
return 0;//無解
}
if(parseDigit(MultNumber, Digit, true) == 0)//parse the first number
{
return 0;//無解
}
printf("X-1:");
for(int i = 0; i < (int)strlen(Digit); i++)
{
printf("%c, ",Digit[i]);
}
if(parseOtherPossb(MultNumber, otherDigit, Digit) == 0)
{
return 0;//無解
}
printf("\nX-2:");
for(int i = 0; i < (int)strlen(otherDigit); i++)
{
printf("%c, ",otherDigit[i]);
}
if(parseSingleMedian(MultNumber, Digit, otherDigit) == 0)
{
return 0;//無解
}
printf("\nX-3:");
for(int i = 0; i< (int)strlen(Digit); i++)
{
printf("%c, ",Digit[i]);
}
printf("\nX-4:");
for(int i = 0; i< (int)strlen(otherDigit); i++)
{
printf("%c, ",otherDigit[i]);
}
tmp[0] = Digit[0];
Number *= atoi(tmp);
tmp[0] = otherDigit[0];
Number += atoi(tmp);
printf("\nX-Number:%d\n", Number);
//20008
int step = 4;
int intIndex;
for(int i = 1; i<Count/2; i++)
{
memset(otherDigit, 0, 11);
memset(Digit, 0, 11);
memset(endDigitList, 0, 11);
if(parseDigit(MultNumber, Digit) == 0)
{
isSuccess = false;
break;
}
printf("X-%d:",++step);
for(intIndex = 0; intIndex < (int)strlen(Digit); intIndex++)
{
printf("%c, ",Digit[intIndex]);
}
if(updataNoRepeatNumber(Number, Count, Digit, i) == 0)
{
isSuccess = false;
break;
}
printf("\nX-%d:", ++step);
for(intIndex = 0; intIndex < (int)strlen(Digit); intIndex++)
{
printf("%c, ",Digit[intIndex]);
}
if(parseOtherDigit(MultNumber, Number, Digit, otherDigit, i) == 0)
{
isSuccess = false;
break;
}
printf("\nX-%d:", ++step);
for(intIndex = 0; intIndex < (int)strlen(otherDigit); intIndex++)
{
printf("%c, ", otherDigit[intIndex]);
}
if(updataNoRepeatNumber(Number, Count, otherDigit, i) == 0)
{
isSuccess = false;
break;
}
printf("\nX-%d:", ++step);
for(intIndex = 0; intIndex < (int)strlen(otherDigit); intIndex++)
{
printf("%c, ", otherDigit[intIndex]);
}
tmp[0] = Digit[0];
Number += (atoi(tmp)* (int)pow(10, Count - i - 1));
tmp[0] = otherDigit[0];
Number += atoi(tmp) * (int)pow(10, i);
printf("\nX-Number:%d\n", Number);
}
//----------------part 1
redex 2007-09-11
  • 打赏
  • 举报
回复
MARK.
xure1234 2007-09-11
  • 打赏
  • 举报
回复

在VC中运行后得到结果:21978
//---------------------------------------------------------------------------
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
int A = 2, B, C, D, E = 8;
long int temp1, temp2;

for(B = 0; B <= 9; B++)
{
if((B != A) && (B != E))
{
for(C = 0; C <= 9; C++)
{
if((C != A) && (C != B) && (C != E))
{
for(D = 0; D <= 9; D++)
{
if((D != A) && (D != B) && (D != C) && (D != E))
{
temp1 = A * 10000 + B * 1000 + C * 100 + D * 10 + E;
temp2 = E * 10000 + D * 1000 + C * 100 + B * 10 + A;
if((temp1 * 4) == temp2)
cout << temp1 << endl;
}
}
}
}
}

}
system("pause");

return 0;
}
gxdl5460 2007-09-11
  • 打赏
  • 举报
回复
hustwei()
Too cool!
qianlima888 2007-09-11
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include <iostream>

using namespace std;

int main(void)
{
int a,b,c,d,e;
for(a=1;a<10;a++)
for(b=0;b<10;b++)
for(c=0;c<10;c++)
for(d=0;d<10;d++)
for(e=1;e<10;e++)
{
if (a==b || b==c || c==d || d==e)
{
continue;
}
if((a*10000+b*1000+c*100+d*10+e)*4==(e*10000+d*1000+c*100+b*10+a))
cout<<(a*10000+b*1000+c*100+d*10+e)<<"*4=="<<e*10000+d*1000+c*100+b*10+a<<endl;

}

system("pause");
return 0;
}
通过VS2005调试!
zhengwei1981 2007-09-10
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int main()
{
for(int i=0;i<=9;i++)
{
for(int j=0;j<=9;j++)
{
for(int u=0;u<=9;u++)
{
for(int k=0;k<=9;k++)
{
for(int e=0;e<=9;e++)
{
if((i*10000+j*1000+u*100+k*10+e)*4==(e*10000+k*1000+u*100+j*10+i))
cout<<i<<endl<<j<<endl<<u<<endl<<k<<endl<<e<<endl;
}
}
}
}
}
cin.get();
}
ascent2006 2007-09-10
  • 打赏
  • 举报
回复
LS的,为什么万位一定是2?
wlj040801 2007-09-10
  • 打赏
  • 举报
回复
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
int i,a,b,c,d,e;
for(i=20008;i<22500;i+=10)
{
a=2;/*万位一定是2*/
b=i/1000%10;
c=i/100%10%10;
d=i/10%10%10%10;
e=8;/*个位一定是8*/
if((b!=2&&c!=2&&d!=2&&b!=c&&b!=d&&b!=8&&c!=d&&c!=8&&d!=8&&i*4==8*10000+d*1000+c*100+b*10+2))

cout<<i<<endl;
}
system("pause");
return 0;
}
加载更多回复(44)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧