社区
C++ 语言
帖子详情
华为面试题,改了一下,你会吗?^_^
xkw365
2007-09-13 08:50:55
一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来.要求:不准用for,while,if,switch语句
...全文
1933
65
打赏
收藏
华为面试题,改了一下,你会吗?^_^
一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来.要求:不准用for,while,if,switch语句
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
65 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
strip
2008-03-29
打赏
举报
回复
[Quote=引用 62 楼 arong1234 的回复:]
如果大家一定要确保有无解退出的解,如下
template <int i>
int result()
{
return ((
i> =10000 &&
i<=10000 ||
i*4==(10000*(i%10) + 1000*((i/10)%10)) + 100*((i/100)%10))+10*((i/1000)%10)) + ((i/10000)%10)))?(i):(template sum <i-1> ()));
}
#include <iostream>
using namespace std;
int main()
{
int iResult = result <30000> ;
cout < < (iResult > 10000)?(iResult):( "no such number ")) < < endl;
}
[/Quote]
ren_xu123
2007-09-19
打赏
举报
回复
yevv(荷柴樵夫) :
高人!!!!!!!!!!!1
xkw365
2007-09-19
打赏
举报
回复
ls辛苦了,呵呵
中间件XL
2007-09-19
打赏
举报
回复
解题思路:
正常的话只要if/for就可以解决问题,for,while,if,switch不能用,那可以用其他来模拟if/for就可以。if可以用"?:"加上内部类(对C++就是函数指针)来模拟,for可以用递归模拟。
另外:
E->A
E,D->B 因此只要穷举EDC,验证ABCDE是否互不相等就可以。
代码如下(java6.1通过):
import java.lang.Math;
public class test {
// 抽象语句类
abstract class Statement {
protected int A,B,C,D,E;
abstract void Execute();
public void Assign(Statement s) {
A=s.A;
B=s.B;
C=s.C;
D=s.D;
E=s.E;
}
}
// 空操作语句
class ST_NOP extends Statement {
public void Execute() {
return;
}
}
//
class ST_PrintABCDE extends Statement {
public void Execute() {
System.out.print(A);
System.out.print(B);
System.out.print(C);
System.out.print(D);
System.out.println(E);
}
}
//
class ST_FindABCDE extends Statement {
//
class ST_NextCDE extends Statement {
public void Execute() {
Statement s1=new ST_NextC();
s1.Assign(this);
Statement s2=new ST_NextDE();
s2.Assign(this);
Statement s=(C<9) ? s1 : s2;
s.Execute();
Assign(s);
}
}
//
class ST_NextDE extends Statement {
public void Execute() {
Statement s1=new ST_NextD();
s1.Assign(this);
Statement s2=new ST_NextE();
s2.Assign(this);
Statement s=(D<9) ? s1 : s2;
s.Execute();
Assign(s);
}
}
//
class ST_NextD extends Statement {
public void Execute() {
C=1;
D++;
}
}
//
class ST_NextE extends Statement {
public void Execute() {
C=1;
D=1;
E++;
}
}
//
class ST_NextC extends Statement {
public void Execute() {
C++;
}
}
// 根据E计算A
private void CalculateA() {
A=(E*4)%10;
}
//
private void CalculateB() {
B=((D*4)%10+(E*4)/10)%10;
}
//
private void NextCDE() {
Statement s=new ST_NextCDE();
s.Assign(this);
s.Execute();
Assign(s);
}
// 验证ABCDE互不相等
private Statement Validate() {
CalculateA();
CalculateB();
Statement s1=new ST_PrintABCDE();
s1.Assign(this);
Statement s2=new ST_FindABCDE();
s2.Assign(this);
double X=(A*Math.pow(10,4)+B*Math.pow(10,3)+C*Math.pow(10,2)+D*10+E)*4;
double Y=(E*Math.pow(10,4)+D*Math.pow(10,3)+C*Math.pow(10,2)+B*10+A);
boolean b=(Math.round(X)==Math.round(Y));
return test.fn_IF(b,s1,s2);
};
//
public void Execute() {
NextCDE();
Validate().Execute();
}
}
// 模拟IF语句
static Statement fn_IF(boolean b, Statement s1, Statement s2) {
return b ? s1 : s2;
}
//
public void findABCDE() {
Statement s=new ST_FindABCDE();
s.E=1;
s.D=1;
s.C=0;
s.Execute();
}
//
public static void main(String a[]) {
new test().findABCDE();
}
}
后记:完成后发现比初想的复杂很多。
arong1234
2007-09-19
打赏
举报
回复
to coolFly19() ( )
这只是编程算法,不是实际实现,我估计绝大多数编译器都不会允许这样的递归
我们也不需要他能被实际编译通过,因为实际情况下绝对不会有楼主的限制
这个题目只是考你思维,不是让你写程序
arong1234
2007-09-19
打赏
举报
回复
如果大家一定要确保有无解退出的解,如下
template<int i>
int result()
{
return ((i>=10000 && i*4==(10000*(i%10) + 1000*((i/10)%10)) + 100*((i/100)%10))+10*((i/1000)%10)) + ((i/10000)%10)))?(i):(template sum<i-1>()));
}
#include <iostream>
using namespace std;
int main()
{
int iResult = result<30000>;
cout<< (iResult >= 10000)?(iResult):("no such number")) << endl;
}
xkw365
2007-09-19
打赏
举报
回复
<9的地方是否都得改成<10吧
中间件XL
2007-09-19
打赏
举报
回复
细看一下,arong1234()已经给出答案,简洁高效,学习了.
但都没解决无解退出递归的问题.
我的代码虽复杂,但设计上考虑到扩展.现在给出解决递归退出的代码.
import java.lang.Math;
public class test {
// 抽象语句类
abstract class Statement {
protected int A,B,C,D,E;
abstract void Execute();
public void Assign(Statement s) {
A=s.A;
B=s.B;
C=s.C;
D=s.D;
E=s.E;
}
}
// 空操作语句
class ST_NOP extends Statement {
public void Execute() {
System.out.print("NO SOLUSION!");
}
}
//
class ST_PrintABCDE extends Statement {
public void Execute() {
System.out.print(A);
System.out.print(B);
System.out.print(C);
System.out.print(D);
System.out.println(E);
}
}
//
class ST_FindABCDE extends Statement {
//
class ST_NextCDE extends Statement {
public void Execute() {
Statement s1=new ST_NextC();
s1.Assign(this);
Statement s2=new ST_NextDE();
s2.Assign(this);
Statement s=(C<9) ? s1 : s2;
s.Execute();
Assign(s);
}
}
//
class ST_NextDE extends Statement {
public void Execute() {
Statement s1=new ST_NextD();
s1.Assign(this);
Statement s2=new ST_NextE();
s2.Assign(this);
Statement s=(D<9) ? s1 : s2;
s.Execute();
Assign(s);
}
}
//
class ST_NextD extends Statement {
public void Execute() {
C=1;
D++;
}
}
//
class ST_NextE extends Statement {
public void Execute() {
C=1;
D=1;
E++;
}
}
//
class ST_NextC extends Statement {
public void Execute() {
C++;
}
}
//
private void NextCDE() {
Statement s=new ST_NextCDE();
s.Assign(this);
s.Execute();
Assign(s);
}
//
class ST_ValidABCDE extends Statement {
// 根据E计算A
private void CalculateA() {
A=(E*4)%10;
}
// 根据E,D计算B
private void CalculateB() {
B=((D*4)%10+(E*4)/10)%10;
}
//
public void Execute() {
CalculateA();
CalculateB();
Statement s1=new ST_PrintABCDE();
s1.Assign(this);
Statement s2=new ST_FindABCDE();
s2.Assign(this);
int X=(A*10000+B*1000+C*100+D*10+E)*4;
int Y=(E*10000+D*1000+C*100+B*10+A);
boolean b=(X==Y);
Statement s=test.fn_IF(b,s1,s2);
s.Execute();
}
}
// 验证ABCDE
private void Validate() {
Statement s1=new ST_NOP();
s1.Assign(this);
Statement s2=new ST_ValidABCDE();
s2.Assign(this);
boolean b=(E>9);
Statement s=test.fn_IF(b,s1,s2);
s.Execute();
};
//
public void Execute() {
NextCDE();
Validate();
}
}
// 模拟IF语句
static Statement fn_IF(boolean b, Statement s1, Statement s2) {
return b ? s1 : s2;
}
//
public void findABCDE() {
Statement s=new ST_FindABCDE();
s.E=1;
s.D=1;
s.C=0;
s.Execute();
}
//
public static void main(String a[]) {
new test().findABCDE();
}
}
jdk6.1测试 1.ABCDE*4=EDCBA
2.ABCDE*5=EDCBA
通过.
iwillalwaysloveyou
2007-09-18
打赏
举报
回复
zasu说的有道理
这符合我手工推理的时候的描述
我的main函数把
cout<< result<99999> << endl;
改成
cout<< result<29999> << endl;
即可
================================================
你改成21979更好
zhaoyue12365
2007-09-18
打赏
举报
回复
楼主说哪一题没有完全做对?
xkw365
2007-09-18
打赏
举报
回复
没有输入?
xkw365
2007-09-18
打赏
举报
回复
到现在还没有人完全作对呀^_^
coolFly19
2007-09-18
打赏
举报
回复
To arong1234() :
你用的什么编译器?我的是vs2003,cout<< result<99999> << endl;这行代码我是不能编译通过的,好像说什么递归函数太复杂,类似的我设成result<100>就好了,
isarc
2007-09-18
打赏
举报
回复
用心去算,让电脑失业。
arong1234
2007-09-18
打赏
举报
回复
zasu说的有道理
这符合我手工推理的时候的描述
我的main函数把
cout<< result<99999> << endl;
改成
cout<< result<29999> << endl;
即可
iwillalwaysloveyou
2007-09-18
打赏
举报
回复
int f()
{
return 21978;
}
xkw365
2007-09-17
打赏
举报
回复
还有人答吗?要不就结账了呵呵
iwillalwaysloveyou
2007-09-17
打赏
举报
回复
再说一遍,这种没有输入的题目,不适合用程序计算
zhhuajian
2007-09-17
打赏
举报
回复
看来我递归还真得好好学学
zasu06
2007-09-17
打赏
举报
回复
这里还有个问题,如果是有重复的或者是无结果呢 ? 怎么让递归终止?
freshui(五月的风 -最近老犯困)
strlen(srcNum)>5? return : (nop); //退出条件
这么退出好象不行, 因为return 语句无法这么使用
而其他人就是得出一个答案就不再继续
加载更多回复(45)
c语言
面试题
与c语言有关的
面试题
华为
笔试题
c语言
面试题
与c语言有关的
面试题
华为
笔试题 c语言
面试题
与c语言有关的
面试题
华为
笔试题 c语言
面试题
与c语言有关的
面试题
华为
笔试题 c语言
面试题
与c语言有关的
面试题
华为
笔试题 c语言
面试题
与c语言有关的
面试题
华为
笔试题 c语言
面试题
与c语言有关的
面试题
华为
笔试题 c语言
面试题
与c语言有关的
面试题
华为
笔试题 c语言
面试题
与c语言有关的
面试题
华为
笔试题 c语言
面试题
与c语言有关的
面试题
华为
笔试题 c语言
面试题
与c语言有关的
面试题
华为
笔试题
华为
OD
面试题
练习(代码题部分)
华为
OD
面试题
练习(代码题部分) 准备面试
华为
外包德科,记录
一下
一些
面试题
;
华为
OD面试大致分为五轮,第一轮基础面试,第二轮机试
[2023]云原生高薪实战技术K8S案例分析:基于生产环境学习k8s
韩先超老师一直在一线工作,具备实战经验,课程内容均来自企业真实项目,课程覆盖大厂真实案例,讲解世界1000强企业实战课程,大家可以放心学习,学习课程之后即可在公司具体应用。 讲师简介高级运维、资深DevOps工程师、首席技术架构师;具备RHCE、RHCA、CKA、CKS等认证证书;参加过新一代云计算大
会
,作为主讲嘉宾分享k8s如何助力企业转型、被北京日报发文专题报道;同时也对对中国移动、电信、咪咕视讯等企业做过线上k8s技术培训。 怎么学习kubernetes?K8S体系涉及到的技术众多,包括存储、网络、安全、监控、日志、DevOps、微服务、故障排查等,很多刚接触K8S的初学者,都
会
感到无从下手 关于课程的一些疑问1、课程讲解的k8s版本是哪一个?K8s课程版本
会
随着官方版本随时更新,针对不同版本k8s新增功能也
会
同步更新。 2、需要自己做笔记吗?是否提供课程资料?课程提供完整的学习资料和文档,大家可以在我提供的资料基础上做一些标注修改即可,节省大家整理笔记时间 常见问题:问:k8s是最新版本吗答:是的,基于目前官方最新版本录制问:里面有实战项目吗?答:有实战项目,如go代码部署到k8s;tomcat服务部署到l8s;将公司代码迁移到K8s完整流程。
华为
od前端
面试题
华为
od前端岗位
面试题
总结
华为
芯片设计
面试题
_
华为
公司面试硬件工程师笔试题
华为
公司面试硬件工程师笔试题
华为
是我国知名的大企业,那么它在招聘硬件工程师的时候有什么要求呢?以下是百分网小编精心为大家整理的
华为
公司面试硬件工程师笔试题,希望对大家有所帮助!更多内容请关注应届毕业生网!一 选择 13个题目,没有全部抄下来,涉及的课程有电路,模拟电路,数字电路,信号与系统,微机原理,网络,数字信号处理有关于1.微分电路2.CISC,RISC3.数据链路层二 填空 10个题目,没有...
C++ 语言
64,648
社区成员
250,503
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章