求哪位高手解决下,谢谢
正方形ABCD的边长是2 个单位,一只乌龟从A点出发以2个单位每秒的速度顺时针绕正方形运动,另有一个兔子也从A点出发以6个单位每秒的速度逆时针绕正方形动,则它们第2021次相遇在哪个点? 本帖最后由 jhq999 于 2022-1-23 16:56 编辑int s0=0,s1=0,count=0;//s0乌龟爬的距离,s1兔子跑的距离,count相遇次数
while(1)
{
if((s0%8+s1%8)==8)
{
count++;
if(count==2021)break;
}
s0+=2;
s1+=6;
}
//s0%8 s1%8 结果
当然你也可以在次数上求余,2021%4=1,第一次在1 第二次在2……3……第4次是在原点,所以在第三次遇到的地点
本帖最后由 翼是孤独 于 2022-1-23 17:37 编辑
不好意思读错题了,看成同方向了,看别的代码吧,我这是求同方向的
不过代码下面的分析还是可以用的
----------------------------------------
public class Test {
public static void main(String[] args) {
//i、j分别表示记录乌龟和秃子相对A点顺时针距离
int i= 0,j = 0;
//记录乌龟走的距离
int i_len = 0;
int count = 2021;
char[] point = {'A', 'B', 'C', 'D'};
while(count > 0) {
i_len += 2;
i = (i + 2) % 8;
j = (j + 6)% 8;
if(i == j) { count--; }
}
System.out.println(point[(i_len % 8) / 2] );
}
}
-------------------------------------------------------------------
上面是通解
实际上乌龟和秃子只会在A C 两点相遇。
第一次在C,第二次在A,第三次在C ...
你可以发现第三次和第一次其实是等价的情况,相遇在A点也就相当于重新出发
所以简化一下,直接2021%2 = 1 所以是在C点 jhq999 发表于 2022-1-23 16:41
当然你也可以在次数上求余,2021%4=1,第一次在1 第二次在2……3……第4次是在原点,所以在第三次遇到的 ...
(s0 % 8 + s1 % 8) == 8 并不是相遇点吧 本帖最后由 傻眼貓咪 于 2022-1-23 17:07 编辑
#include <stdio.h>
int main()
{
char points = {'A', 'B', 'C', 'D'};
int t, r, p;
t = r = 0; // t 为乌龟当前点,r 为兔子当前点,n 为相遇次数
for(int n = 0; n < 2021; t = (t+1)%4, r = (r+3)%4){
if(t == r && t){
p = t; // 将最新相遇点存入 p
n++;
}
}
printf("它们第 2021 次相遇的点:%c 点", points); // 最终相遇点
return 0;
} 本帖最后由 jhq999 于 2022-1-23 17:13 编辑
翼是孤独 发表于 2022-1-23 17:01
(s0 % 8 + s1 % 8) == 8 并不是相遇点吧
我认为开始时不能称作相遇
第一次在b,乌龟爬了2,兔子跑了6
第二次在c ,4,12
3次 d 618
4次 a 824
然后重复重复再重复
jhq999 发表于 2022-1-23 17:08
我认为开始时不能称作相遇
第一次在b,乌龟爬了2,兔子跑了6
第二次在c ,4,12
哦哦,你是直接计算出来和是8再写的代码
我还以为你的意思是加起来是一圈就相遇 #include "stdio.h"
void main()
{
int s0=0,s1=0,count=0,time=0;//s0乌龟爬的距离,s1兔子跑的距离,count相遇次数
while(count<2021)
{
if((s0%8+s1%8)==8)
{
count++;
if(count==2021)
{
printf("第2021次相遇在%d秒后。\n",time);
switch(s0%8)
{
case 0:printf("相遇在点“A”。\n");break;
case 2:printf("相遇在点“B”。\n");break;
case 4:printf("相遇在点“C”。\n");break;
case 6:printf("相遇在点“D”。\n");break;
}
}
}
s0+=2;
s1+=6;
time++;
}
} jhq999 发表于 2022-1-23 16:41
当然你也可以在次数上求余,2021%4=1,第一次在1 第二次在2……3……第4次是在原点,所以在第三次遇到的 ...
如果顺时针为ADCB,求余为1,应该在D点,为什么是第三次遇到的呢?谢谢,请指教 翼是孤独 发表于 2022-1-23 16:59
上面是通解
实际上乌龟和秃子只会在A C 两点相遇。
这个是求同方向,相遇的点位吧,谢谢,又多学了一招{:5_109:} bz00 发表于 2022-1-23 17:30
这个是求同方向,相遇的点位吧,谢谢,又多学了一招
哈哈哈,原来是我读错题了,我还以为两个都是同方向{:5_99:} 傻眼貓咪 发表于 2022-1-23 17:05
请问if(t == r&&t)是什么意思啊?为什么不是直接t=r? 本帖最后由 jhq999 于 2022-1-23 18:15 编辑
bz00 发表于 2022-1-23 17:30
如果顺时针为ADCB,求余为1,应该在D点,为什么是第三次遇到的呢?谢谢,请指教
领会精神{:5_109:},1应该是B点我搞错了,2是c, 3是d, 0是A 翼是孤独 发表于 2022-1-23 17:14
哦哦,你是直接计算出来和是8再写的代码
我还以为你的意思是加起来是一圈就相遇
相反方向当然是加起来一圈相遇 本帖最后由 傻眼貓咪 于 2022-1-23 18:45 编辑
青枫, 发表于 2022-1-23 17:47
请问if(t == r&&t)是什么意思啊?为什么不是直接t=r?
因为题目要求相遇,第一次(t = 0)不算,所以从 t = 1 开始,但是我的代码也是错的{:5_100:} bz00 发表于 2022-1-23 17:30
如果顺时针为ADCB,求余为1,应该在D点,为什么是第三次遇到的呢?谢谢,请指教
抱歉了,读错题目,原来乌龟和兔子是反方向移动,我的代码也不正确,{:5_100:} /*
A ------ B
| |
| |
| |
D ------ C
*/
#include <stdio.h>
int main()
{
char turtle = {'A', 'B', 'C', 'D'}; // 乌龟路线(顺时针)
char rabbit = {'A', 'D', 'C', 'B'}; // 兔子路线(逆时针)
int t, r, p;
t = r = 0; // t 为乌龟当前点,r 为兔子当前点,n 为相遇次数
for(int n = 0; n <= 2021; t = (t+1)%4, r = (r+3)%4)
{
if(turtle == rabbit){
p = t; // 将最新相遇点存入 p
n++;
}
}
printf("它们第 2021 次相遇的点:%c 点", turtle); // 最终相遇点
return 0;
} 各位都看错题了吧
$ cat main.c
#include <stdio.h>
size_t tortoise_next(size_t index) {
return (index + 2) % 8;
}
size_t rabbit_next(size_t index) {
return 7 - (7 - index + 6) % 8;
}
int main(void) {
// A B C
// H D
// G F E
//char point = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
size_t tortoise = 0;
size_t rabbit = 0;
size_t count = 0;
while(count != 2021) {
//while(count != 1) {
//while(count != 2) {
//while(count != 3) {
tortoise = tortoise_next(tortoise);
rabbit = rabbit_next(rabbit);
if(tortoise == rabbit) ++count;
}
printf("%c\n", (char)(tortoise + 'A'));
return 0;
}
$ gcc-debug -o main main.c
$ ./main
C
$ #include <iostream>
using namespace std;
int main()
{
int a,b;
int x = 2;//乌龟速度
int y = 6;//兔子速度
float t;
int z = 2012 * 6;//2012次相遇走的总路程
t = z/(x+y);//2012次相遇所需时间
a = t*6;//兔子所走路程
b = a%6;//算出结果
cout << b << endl;
system("pause");
return 0;
} 张大帅 发表于 2022-1-23 21:46
#include
using namespace std;
可以解释一下最终结果的含义吗?
最后的 b 表示什么?
题目最后是问它们第2021次相遇在哪个点?
a%6的值是
如果最终得到的值是3,那就是在3点相遇?
3点是哪个点?正方形的右下角?
页:
[1]
2