| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1409 人关注过本帖
标题:求知之声你给我进来
只看楼主 加入收藏
xupeng
Rank: 1
等 级:新手上路
帖 子:4049
专家分:0
注 册:2006-2-12
收藏
得分:0 
这是爱因.斯坦出的题目,保证有办法解决

反清复明 http://xupeng.
2006-08-12 14:13
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 
xupeng小同学已经准备开始欺负人了,这世道。。。

http://myajax95./
2006-08-12 14:15
xupeng
Rank: 1
等 级:新手上路
帖 子:4049
专家分:0
注 册:2006-2-12
收藏
得分:0 
以下是引用myajax95在2006-8-12 14:15:15的发言:
xupeng小同学已经准备开始欺负人了,这世道。。。


反清复明 http://xupeng.
2006-08-12 14:16
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 
随便google一下就可以找到了。

http://myajax95./
2006-08-12 14:19
xupeng
Rank: 1
等 级:新手上路
帖 子:4049
专家分:0
注 册:2006-2-12
收藏
得分:0 

解题方法:

首先对13个球标号并分组:

1、 2、 3、 4 A1组

5、 6、 7、 8 B1组

9、10、11、12 C1组

13

称量A与B,记录结果R1(这里用大于0表示A>B,其它类推)

然后二次分组

13、2、 7、 8 A2组

1、 6、11、12 B2组

5、10、 3、 4 C2组

9

称量A2与B2,记录结果R2

开始分析结果:

如果R1=R2=0,则证明非标准球没有上过天平,这样,嫌疑球有2个:9号球、10号球。符合我前面提出的解决条件。可以解决这个问题。结果将在9,10中产生。

如果R1=0,R2>0(或者R2<0),则证明第二次测量的时候,非标准球上了天平,这样,嫌疑球有三个:13,11,12。这符合我在前面提到的第二种情况,也可解决。结果将在13,11,12中产生。

如果R1>0,R2=0,非常简单,这证明非标准球在第二次测量的时候,离开了天平,嫌疑球有三个:5,3,4。我们可以用第一次的比较结果作条件,用第二个解决办法找到非标准球。结果将在5,3,4中产生。

如果
R1>0,R2>0,证明第二次测量的时候,非标准球一直天平上,但此时嫌疑球好像是有四个:1、2、6、7、8,其实不是这样的,从测试结果上看,非标准球没有离开过自己的位置,这样的话,只有2与6是嫌疑球。结果将在2,6中产生。

R1>0,R2<0,同理,非标准球移动了自己的位置,这么来说,嫌疑球就应该是:1,7,8。显然这符合第二个条件。结果将在1,7,8中产生。

显然已经没有必要讨论R1<0的情况了,这同R1>0实际上是一样的。


反清复明 http://xupeng.
2006-08-12 14:20
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 
xupeng小同学就拿这个已经知道答案的题给自己出一道题吧。364个球,6次称出来,屏幕上输出所有可能情况。用VB,C++,C#,C语言都可以

http://myajax95./
2006-08-12 14:24
xupeng
Rank: 1
等 级:新手上路
帖 子:4049
专家分:0
注 册:2006-2-12
收藏
得分:0 
我在玩黑客,没功夫理你

反清复明 http://xupeng.
2006-08-12 14:32
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 
噢,那有功夫再说。

http://myajax95./
2006-08-12 14:34
求知之声
Rank: 2
等 级:新手上路
威 望:5
帖 子:3021
专家分:0
注 册:2006-3-13
收藏
得分:0 

用C语言做了三个:
指针:

main()
{
long *num;
int i;
*num=*(num+1)=1 ;
for(i=2;i<30;i++)
{
*(num+i)=*(num+i-1)+*(num+i-2);
}
printf("the 30st number ia:%ld",*(num+29));
getch();
};
顺序表;
#include <stdio.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10



typedef long ElemType;
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;

void InitList_Sq(SqList *L)
{
(*L).elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (!L->elem) exit(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
return OK;
}


void ListInsert_Sq(SqList *L,int i,ElemType e)
{
ElemType *newbase,*p,*q;
if (i<1||i>L->length+1) return ERROR;
if(L->length>=L->listsize)
{
newbase=(ElemType *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
if (!newbase) exit (OVERFLOW);
L->elem=newbase;
L->listsize+=LISTINCREMENT;
}
q=&(L->elem[i-1]);
for (p=&(L->elem[L->length-1]);p>=q;--p) *(p+1)=*p;
*q=e;
L->length++;
return OK;
}

main()
{

SqList *L;
int i;
long *num;
L=NULL;
clrscr();
InitList_Sq(L);
for(i=0;i<30;i++)
{
if(i <2)
*(num+i)=1;
if(i>=2)
*(num+i)=*(num+i-1)+*(num+i-2);
ListInsert_Sq(L,L->length+1,*(num+i));
}
printf("the 30st number is:%ld",L->elem[29]);
free(L);
getch();

}

用栈结构
#include <stdio.h>
#include <malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW -2
typedef long ElemType;
typedef struct
{
ElemType *top,*base;
int stacksize;
}SqStack;

void InitStack(SqStack *s)
{
s->base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if (!s->base) exit (OVERFLOW);
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
}

void DestroyStack(SqStack *s)
{
free(s);
}


int StackEmpty(SqStack *s)
{
return (s->top==s->base);
}

int Push(SqStack *s,ElemType e)
{
if (s->top-s->base>=s->stacksize)
{
s->base=(ElemType *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(ElemType));
if (!s->base) exit (OVERFLOW);
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCREMENT;
}
*(s->top)=e;
s->top++;
return 1;
}

main()
{
SqStack *s;
int i ;
long a[29];
a[1]=a[0]=1;s=(SqStack *)malloc(sizeof(SqStack));
InitStack(s);
if (StackEmpty(s))
printf("stack s is empty.\n");
else
printf("stack s is not empty.\n");
printf("please input elem to push:\n");
for(i=0;i<30;i++)
{
if(i<2)
a[i]=1;
if(i>=2)
a[i]=a[i-1]+a[i-2];

Push(s,a[i]); }

printf("the 30st number:%ld",*(s->top-1));
DestroyStack(s);
getch();
}


人生是没有终点 征战才能生存,退缩就等于死亡,为了胜利,为了荣誉,进攻,进攻再进攻!!
2006-08-13 17:25
求知之声
Rank: 2
等 级:新手上路
威 望:5
帖 子:3021
专家分:0
注 册:2006-3-13
收藏
得分:0 

机子在学校,找别人借,耽误了一些时间,我编程时间不长,若有错误的地方,还请大家指出来,多多赐教!


人生是没有终点 征战才能生存,退缩就等于死亡,为了胜利,为了荣誉,进攻,进攻再进攻!!
2006-08-13 17:28
快速回复:求知之声你给我进来
数据加载中...
 
   



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

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