笔试过的一道逻辑题

CowardlyLion 2009-06-23 10:38:40
加精
今天在某公司做的笔试题,如下:

007有个闹钟,有一个分针键和一个时针键。按一次时针键,闹钟时间往前走一小时;按分针键,闹钟时间往前走一分钟。最差情况下,007需要按59次分针键才能调到想设置的闹钟时刻。007想改进一下,于是加了一个魔术键。每按一次该建,闹钟时刻的分针往前走N分钟。试问,最差情况下,N为几时,按键次数最少。写出按键的序列。

假设第一次按魔术键,闹钟时刻的分针往前走N分钟;第二次按魔术键,闹钟时刻的分针往前走M分钟;第三次按魔术键,闹钟时刻的分针往前走N分钟;第四次按魔术键,闹钟时刻的分针往前走M分钟。依此类推,试问最差情况下,M ,N为几时,按键次数最少。写出按键的序列。

没分了,大家踊跃啊!
...全文
292 128 打赏 收藏 转发到动态 举报
写回复
用AI写文章
128 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiang5495 2009-07-15
  • 打赏
  • 举报
回复
路过,学习
wusong0 2009-07-11
  • 打赏
  • 举报
回复
N为什么要小于10呢???
wusong0 2009-07-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 troyaninpc 的帖子:]
今天在某公司做的笔试题,如下:

007有个闹钟,有一个分针键和一个时针键。按一次时针键,闹钟时间往前走一小时;按分针键,闹钟时间往前走一分钟。最差情况下,007需要按59次分针键才能调到想设置的闹钟时刻。007想改进一下,于是加了一个魔术键。每按一次该建,闹钟时刻的分针往前走N分钟。试问,最差情况下,N为几时,按键次数最少。写出按键的序列。

假设第一次按魔术键,闹钟时刻的分针往前走N分钟;第二次按魔术键…
[/Quote]
什么是最差情况呀!!!!!
问题就问的不明确。。。。
如果最差情况是差59分我把n设置为59一下就完了。。。
而且问题里的时针根本用不到呀!!!!
zxfjava2009 2009-07-01
  • 打赏
  • 举报
回复
没看太懂啊!! 看数学知识太溃乏了啊!!!!
hey2009 2009-06-26
  • 打赏
  • 举报
回复
还有:
N=10,M=9 数56需要的按键次数:13为最差情况
10+9+10+9+10+1+1+1+1+1+1+1+1
qq276402087 2009-06-26
  • 打赏
  • 举报
回复
帮顶
hey2009 2009-06-26
  • 打赏
  • 举报
回复
public class Test {
public static void main(String[] args) {
question1();
question2();
}
static void question1(){
int k = 59;
for(int i = 2;i< 59;i++){//i表示魔术键代表的值
int result = 59;
int num=0;//按魔术键的按键次数
int yiNum = 0;//分针键的按键次数
int result1 =0;
int result2 = 0;
//以i为单元

//当具有最大单元个数时,即要使按键次数最大则该值为59
num=59/i;
yiNum = 59%i;
result1 = num+yiNum;

//当数值为(59/i)*i-1时,也有可能使按键次数最大
num = 59/i-1;
yiNum = i - 1;
result2 = num+yiNum;
//比较出特定i下,按键的最大次数
result = result1>result2?result1:result2;
//比较所有i下,按键的最大次数
if(result<k){
k=result;
}
}
/*
* ####################输出结果###########################
*/
for(int i = 2;i< 59;i++){
int result = 59;
int num=0;//按魔术键的按键次数
int yiNum = 0;//分针键的按键次数
int result1 =0;
int result2 = 0;
//以i为单元

//当具有最大单元个数时,即要使按键次数最大则该值为59
num=59/i;
yiNum = 59%i;
result1 = num+yiNum;

//当数值为(59/i)*i-1时,也有可能使按键次数最大
num = 59/i-1;
yiNum = i - 1;
result2 = num+yiNum;
//比较出特定i下,按键的最大次数
result = result1>result2?result1:result2;

if(result == k){
if(k==result1){
num=59/i;
yiNum = 59%i;
}
if(k==result2){
num = 59/i-1;
yiNum = i - 1;
}
System.out.print("N="+i+"要按魔术键:"+num+"次,");
System.out.print("按分钟键:"+(i-1)+"次,");
System.out.println("总的按键次数:"+(num+i-1)+";对应的数为:"+(num*i+i-1));
}
}
}

static void question2(){
int k = 59;
//取值
for(int m = 1;m< 59;m++){
int tempK = 59;
for(int n = 1;n< 59;n++){
int result1 = 0;
int result2 = 0;
int result3 = 0;
int nNum=0;//奇数次按魔术键的按键次数
int mNum=0;//偶数次按魔术键的按键次数
int yiNum = 0;//分针键的按键次数

//以m+n为处理单元,

//结果一:当数值为59,有可能使按键次数最大
nNum = 59/(m+n);
mNum = 59/(m+n);
if(59%(m+n)>n){ //当nNum=mNum+1时
nNum = nNum+1;
}
yiNum = 59%(m+n);
result1 = mNum+nNum+yiNum;

//当数值为(59/(m+n))*(m+n)-1时,也有可能使按键次数最大
nNum = 59/(m+n);
mNum = 59/(m+n)-1;
yiNum = m-1;
result2 = mNum+nNum+yiNum;

//当数值为(59/(m+n))*(m+n)-m-1时,也有可能使按键次数最大
nNum = 59/(m+n)-1;
mNum = 59/(m+n)-1;
yiNum = n-1;
result3 = mNum+nNum+yiNum;

//比较上面三个结果,取最大值(即得到在最差情况下,敲击次数)
int result = result1>result2?result1:result2;
result = result3>result?result3:result;
if(result<tempK){
tempK = result;
}
}
if(tempK<k){
k=tempK;
}
}
/*
* ####################输出结果###########################
*/
for(int m = 1;m< 59;m++){
for(int n = 1;n< 59;n++){
int result1 = 0;
int result2 = 0;
int result3 = 0;
int nNum=0;//奇数次按魔术键的按键次数
int mNum=0;//偶数次按魔术键的按键次数
int yiNum = 0;//分针键的按键次数

//以m+n为处理单元,

//结果一:当数值为59,有可能使按键次数最大
nNum = 59/(m+n);
mNum = 59/(m+n);
if(59%(m+n)>n){ //当nNum=mNum+1时
nNum = nNum+1;
}
yiNum = 59%(m+n);
result1 = mNum+nNum+yiNum;

//当数值为(59/(m+n))*(m+n)-1时,也有可能使按键次数最大
nNum = 59/(m+n);
mNum = 59/(m+n)-1;
yiNum = m-1;
result2 = mNum+nNum+yiNum;

//当数值为(59/(m+n))*(m+n)-m-1时,也有可能使按键次数最大
nNum = 59/(m+n)-1;
mNum = 59/(m+n)-1;
yiNum = n-1;
result3 = mNum+nNum+yiNum;

//比较上面三个结果,取最大值(即得到在最差情况下,敲击次数)
int result = result1>result2?result1:result2;
result = result3>result?result3:result;
if(result==k){
if(result==result1){
nNum = 59/(m+n);
mNum = 59/(m+n);
if(59%(m+n)>n){ //当nNum=mNum+1时
nNum = nNum+1;
}
yiNum = 59%(m+n);
}
if(result==result2){
nNum = 59/(m+n);
mNum = 59/(m+n)-1;
yiNum = m-1;
}
if(result==result3){
nNum = 59/(m+n)-1;
mNum = 59/(m+n)-1;
yiNum = n-1;
}
System.out.println("N="+n+",M="+m+" 数"+(mNum*m+n*nNum+yiNum)+"需要的按键次数:"+(result)+"为最差情况");
StringBuffer ex = new StringBuffer("");
for(int p = 0;p< mNum;p++){
ex.append(n+"+"+m+"+");
}
if(nNum!=mNum){
ex.append(+n+"+");
}
for(int p = 0;p< yiNum;p++){
ex.append(1+"+");
}
ex.deleteCharAt(ex.length()-1);
System.out.println(ex.toString());
}

}

}

}
}

测试结果:

N=7要按魔术键:7次,按分钟键:6次,总的按键次数:13;对应的数为:55
N=8要按魔术键:6次,按分钟键:7次,总的按键次数:13;对应的数为:55
N=9要按魔术键:5次,按分钟键:8次,总的按键次数:13;对应的数为:53
N=8,M=6 数49需要的按键次数:13为最差情况
8+6+8+6+8+6+1+1+1+1+1+1+1
N=7,M=7 数55需要的按键次数:13为最差情况
7+7+7+7+7+7+7+1+1+1+1+1+1
N=10,M=8 数45需要的按键次数:13为最差情况
10+8+10+8+1+1+1+1+1+1+1+1+1
N=9,M=9 数53需要的按键次数:13为最差情况
9+9+9+9+9+1+1+1+1+1+1+1+1
N=10,M=9 数47需要的按键次数:13为最差情况
10+9+10+9+1+1+1+1+1+1+1+1+1


ibone 2009-06-26
  • 打赏
  • 举报
回复
[Quote=引用 114 楼 GibGas 的回复:]
引用 112 楼 caomeiliang 的回复:
引用 111 楼 GibGas 的回复:
引用 108 楼 caomeiliang 的回复:
引用 106 楼 zhaoyong209 的回复:
第一题,粗算一下,最短次数为12次,此时魔术键设为14分钟。
加1-9分钟时,需按分钟1-9次。 <=12次
加10-13分钟时,需按魔术键5次,分钟0-3次,总共5-8次。 <=12次
加14-23分钟时,需按魔术键1次,分钟0-9次,总共1-10次。 <=12次
加24-27分钟时,需按魔术键6次,分钟0-3次,总共6…
[/Quote]

我就想知道you是中国人 or not
这种学习英文的方法不错 呵呵
可惜我水平不够 怕笑话

I wonder that weather you are a chinese.
This kind of learning method is helpful and funny.
But I afried of being laugh at.
(Chnglish haha)
HappyKeKe 2009-06-26
  • 打赏
  • 举报
回复
额...题目俺都没看懂....
Freeid_shi 2009-06-26
  • 打赏
  • 举报
回复
create table #temps (n int,i int,j int,h int,k int)
declare @N int declare @i int declare @j int declare @k int declare @h int
set @N=2
set @i=0
set @j=0
set @k=59
while (@N>1) and (@N<60)
begin
while (@i>=0) and (@i<31)
begin
while (@j>=0 and @j<60)
begin
set @k=@N*@i+@j
if (@k>0 and @k<60)
insert into #temps select @N as N,@i as i,@j as j,@i+@j,@k
--print 'N='+cast(@N as varchar(2))+char(32)+'i='+cast(@i as varchar(2))+char(32)+'j='+cast(@j as varchar(2))+char(32)+'j+i='+cast(@j+@i as varchar(2))
set @j=@j+1
end
set @i=@i+1
set @j=0
end
set @N=@N+1
set @i=0
end
select a.n,max(a.h) from
(select n,k,min(h) as h from #temps group by n,k) a group by a.n order by max(a.h),a.n
drop table #temps

7 13
8 13
9 13
6 14
10 14
11 14
5 15
12 15
13 15
14 16
4 17
15 17
16 17
17 18
18 19
19 20
3 21
20 21
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
2 30
30 30
31 30
32 31
33 32
34 33
35 34
36 35
37 36
38 37
39 38
40 39
41 40
42 41
43 42
44 43
45 44
46 45
47 46
48 47
49 48
50 49
51 50
52 51
53 52
54 53
55 54
56 55
57 56
58 57
59 58
Freeid_shi 2009-06-26
  • 打赏
  • 举报
回复
mark
云霄飞车 2009-06-26
  • 打赏
  • 举报
回复
虎滴小猪猪 2009-06-25
  • 打赏
  • 举报
回复
有最终答案吗?
Fyu90 2009-06-25
  • 打赏
  • 举报
回复
顶啊!我数学也差上天啊
CowardlyLion 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 HimeTale 的回复:]
开平方,开立方
假如分成n分,有m个魔术键,那就是n开(m+1)次方

一个魔术键:8
二个魔术键:4
[/Quote]理由?
CowardlyLion 2009-06-25
  • 打赏
  • 举报
回复
LS用程序的话那也是穷举了,没有更妙的思路吗?
我感觉设置M N值时,两数的和K值是线性增长的,即所要按的分钟键数也是线性增长的;而K值与魔术键按键次数x的关系是在 f(k)=60/k-1与x轴整数集合的交集上。
高中数学基本上忘没了,算了。再观望几天,结贴了。
HimeTale 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 81 楼 jiyan1221 的回复:]
當M=2,N=2的時候,需要的最少次數為:30.此時的分鐘值為:59
當M=2,N=3的時候,需要的最少次數為:25.此時的分鐘值為:59
當M=2,N=4的時候,需要的最少次數為:22.此時的分鐘值為:59
當M=2,N=5的時候,需要的最少次數為:19.此時的分鐘值為:55
當M=2,N=6的時候,需要的最少次數為:18.此時的分鐘值為:55
當M=2,N=7的時候,需要的最少次數為:17.此時的分鐘值為:53
當M=2,N=8的時候,需要的最少次數為:18.此時的分鐘值為…
[/Quote]
试了这么长一大坨
这么多你怎么不试试26楼的标准答案?

4,16
ITBedlamite 2009-06-25
  • 打赏
  • 举报
回复
RealStalish 2009-06-25
  • 打赏
  • 举报
回复
这题不错
wangwen1 2009-06-25
  • 打赏
  • 举报
回复
太难啦,做出不来
加载更多回复(107)
企业公司软件测试面试笔试集合 软件测试面试 (测试基础).doc 01_企业面试试卷(综合).doc 01_企业面试试卷(综合)_参考答案.doc 04_企业面试试卷(测试基础).doc 04_企业面试试卷(测试基础)_参考答案.doc 500强公司面试的经典正确与错误回答对比!!! 看看你的弱点.doc C面试.txt Java初学者都必须知道的六大问.doc 百度笔试.txt 北京博彦科技笔试+面试.doc 北京大学计算机科学技术研究所.doc 波尔世通的笔试+面试.doc 测试人员面试.doc 测试.doc 常见的测试(转贴).doc 传视数码公司的面试.doc 汉端笔试(7页).doc 合力金桥的笔试.doc 华为面试.doc 经典逻辑.ppt 联合网视面试.doc 美国英网软件公司目.doc 面试考(腾讯,招行等等).txt 某公司的面试试.doc 奇虎面试.doc 千像互动的笔试.doc 清华同方开发的面试 (有兴趣的看一下了 !).doc 缺陷的等级划分,一个经常被问到的问.doc 软件测试工程师笔试(大集合).doc 软件测试工程师测试试大集合(二)包括答案.doc 软件测试工程师试发布版.doc 软件测试试.doc 软件评测复习知识点(小颖).doc 软通动力面试笔答.doc 瑞星笔试(15道).doc 神州泰岳测试试笔试)转贴.doc 时力科技面试.doc 瓦瑟笔试(限男性).doc 喜安科 面试.doc 性能计算公式.txt 亚控科技比试.doc 一道测试notepad笔试.doc 一道数据库的笔试目.doc 一个外包测试公司的笔试!.doc 一家通讯公司的面试目.doc 英文自我介绍大全.doc 英语面试.doc 英语面试.doc 有意思的逻辑.doc 中软的面试(转贴).doc

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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