第二次约会

   第一次看来我没把人家姑娘吓坏,一周后的一个星期一晚上,我迎来了和T第二次见面机会,那天我发了一条短信给T,“今天晚上我们去外滩逛逛吧!"
T快下班的时候给我打了个电话,当时T和她的小朋友们都还在教室里,T很爽快的答应我的邀请,并且叫他们班所有的
学生异口同声在电话的那端大声叫“叔叔好!”,当时差点没把我耳朵震聋,呵呵,不过心里感觉很幸福,我又多了
一个人生第一次,这么多小朋友一起叫你叔叔。 我对T说,”如果不要加班,我们到南方商城见“
因为职业的原因,T下班挺早的,比我足足要早1个小时,T说她需要先回家,我说:“那我下班出发的时候给你短信”。
18:15左右,我们都到了南方商城,这次见到的T上身一件红色短袖贴身汗衫,下身穿意见绿色休闲库,背了个黑色小旅行包,
虽然休闲,确很是美丽动人,还好,我最近鼻子不错,可以抵抗住血管的汹涌彭湃。
  我们首先去了人民广场的新世界,找了事先在网上看好的一家咖啡厅(红番林),里面很安静,相比第一次,这里就是人间
天堂,很安静,而且格调不错,就是那个沙发做起来不是很舒服,靠背太直。我点了一份德国猪手,T要了一份之士套餐,另外点了
些饮料。边吃边聊,不错,很快打发了两个多小时。(未完待续)

“青蛙约会”通常是一个经典的算法题或者是程序设计题目,在C语言中可以用于练习循环、条件判断以及简单的数学运算能力。 ### 题目背景: 两只青蛙在网上相识了,它们约定在线下见面。但是由于这两只青蛙分别位于两个不同的池塘边,并且只能按照一定的步长跳跃前进,因此需要计算出它们何时能够相遇。 假设第一只青蛙A从坐标X开始,每次跳跃M的距离;第二只青蛙B从坐标Y开始,每次跳跃N的距离。两条跑道长度都为L(即两蛙在一个环形轨道上运动)。求解两只青蛙经过多少次跳跃之后会首次相遇? --- #### 算法思路: 这是一个基于同余定理的问题。我们可以将其转化为寻找最小正整数t使得下面等式成立: ``` (X + t * M) % L == (Y + t * N) % L ``` 整理得到: ``` (t * M - t * N) % L = Y - X ``` 设 `D = M - N` 和 `R = Y - X`, 则问题变成找到满足 `(t * D) % L = R` 的最小非负整数`t`. 为了有效解决此方程,我们需要使用**扩展欧几里得算法**(Extended Euclidean Algorithm),通过它不仅可以验证是否有解还可以直接获得解答。 如果 gcd(D,L)|R (gcd代表最大公约数),则存在解决方案。否则无解,表示这两只青蛙永远无法相遇。 --- ##### C语言代码示例 ```c #include <stdio.h> // 扩展欧几里德算法 int ex_gcd(int a, int b, int *x, int *y){ if(b == 0){ *x = 1; *y = 0; return a; } else{ int r = ex_gcd(b, a%b, x, y); int temp = *x; *x = *y; *y = temp - a/b*(*y); return r; } } void frogMeeting(int x,int y,int m,int n,int l){ int d=m-n,r=y-x,g,x0,y0,k,t; g=ex_gcd(d,l,&x0,&y0); // 调用扩展欧几里德 if(r%g!=0){ // 如果r不是g的倍数,则无解 printf("They cannot meet.\n"); }else{ // 否则有解 k=r/g*x0; // 计算特解k*r/g=x0*(d/l)*l+r t=(long long)(l/g)*(k%(l/g)); // 最小正整数解 printf("Frogs will first meet after jumping for %lld times.",(unsigned long long)t); } } int main(){ int x=1,y=2,m=3,n=4,l=5; frogMeeting(x,y,m,n,l); return 0; } ``` 上述代码实现了利用扩展欧几里德算法求解两只青蛙在给定条件下多久能第一次相遇的功能。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值