用Go语言解方程 go语言逻辑运算符
已知Rt三角形ABC中,角ACB=90度,点O是AB的中点,点E在OC的延长线上,EB垂直于AB连结AE,若AC=8,BC=6
1)、解:延长AC交BE于F点,由于BC垂直AF,AB垂直FB,则:BC^2=AC*CF,求得CF=4.5
十余年的莲池网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整莲池建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“莲池网站设计”,“莲池网站推广”以来,每个客户项目都认真落实执行。
由勾股定理得AB=10,BF=7.5
以B点为原点,EB为x轴,BA为y轴建立平面直角坐标系。则:
B(0,0),A(0,10),O(0,5),F(-7.5,0).
根据A(0,10),F(-7.5,0)求得直线AF的方程为:y=(4/3)x+10,
由于BC垂直AF,所以BC的方程为:y=-(3/4)x
解方程组:y=(4/3)x+10 y=-(3/4)x 得
x=-24/5,y=18/5. 即点C的坐标为:C(-24/5,18/5)
所以:根据C(-24/5,18/5),O(0,5)两点求出直线EO的方程为:y=(7/24)x+5
对于y=(7/24)x+5来说,当y=0时,x=-120/7,即EB的长是120/7。
2)、由E(-120/7,0),A(0,10)两点坐标求得直线AE的方程为:y=(7/12)x+10
过O点作OG垂直AE于G,则:直线OG的方程为y=-(12/7)x+5
解方程组y=(7/12)x+10,y=-(12/7)x+5得:x=-420/193,y=1685/193
即点G的坐标为(-420/193,1685/193)
所以:可求出EG和GO的长度,于是tan∠OEA=OG/EG
很麻烦,你自己知道怎么作就行了。
利用go语言实现求数组交集的算法
题目: 给定两个数组,编写一个函数来计算它们的交集.(来自 leecode(349) )
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4]
说明:
我的解法:
题目同上,只不过在输出的时候
输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2] 示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4]
解法
如果给定的数组是排好序的,
arr1 = [1,2,3,4,4,13],arr2 = [1,2,3,9,10]
那这个返回值该如何获取得两个数组的交集呢?
解法
Go语言 斐波那契数列的解法
这么写效率很低,没有剪枝,存在大量的重复计算。
反正你测试用例是有限的,那我骗过你的测试用例就行了啊;)
求解一个佩尔方程
方程没有10亿以内的解,手动计算应该是行不通的
我写了一个程序,计算出方程的一组特解:
x=379516400906811930638014896080
y=12055735790331359447442538767
算法是求√991的渐进连分数h0/k0,h1/k1...h(l-1)/k(l-1),l是连分数的最小正周期,若l是偶数,则h(l-1)和k(l-1)就是pell方程的一组特解,否则h(2l - 1)和k(2l- 1)是方程的一组特解。证明可以在任何一本数论书上找到,不再赘述,也可以参考wiki百科的pell方程条目
程序附在后面,C++写的,任何一个windows平台下的C++编译器都可以编译(VC++,DEVCPP等等),涉及到大整数的运算比较麻烦,用matlab写起来会更简单
程序清单:
#include stdio.h
#include stdlib.h
#include memory.h
#include math.h
#define LEN 200
#define BASE 10000000 //大整数用10^7进制来计算
typedef __int64 INT;
struct BIG //大整数结构定义,整数每7位拼成一个int64,这样加减乘计算耗时较少
{
INT a[LEN];//存放大整数的数组
int len; //标记大整数的长度,不能超过200
}h[3],k[3];
INT a[1 14],c[1 14],q[1 14];
/*实际是计算:
h[i] = n*h[i - 1] + h[i - 2];
k[i] = n*k[i - 1] + k[i - 2];
这是连分数的递推形式
*/
void go(INT n)
{
int i;
for(i = 0;i h[1].len;i++)
h[2].a[i] = h[1].a[i] * n + h[0].a[i];
for(i = 0;i h[1].len;i++)
h[2].a[i + 1] += h[2].a[i] / BASE,h[2].a[i] %= BASE;
if(h[2].a[h[2].len])
h[2].len++;
for(i = 0;i k[1].len;i++)
k[2].a[i] = k[1].a[i] * n + k[0].a[i];
for(i = 0;i k[1].len;i++)
k[2].a[i + 1] += k[2].a[i] / BASE,k[2].a[i] %= BASE;
if(k[2].a[k[2].len])
k[2].len++;
for(i = 0;i 2;i++)
h[i] = h[i + 1],k[i] = k[i + 1];
}
void print(BIG a) //把大整数输出
{
int i;
printf("%I64d",a.a[a.len - 1]);
for(i = a.len - 2;i = 0;i--)
printf("%07I64d",a.a[i]);
}
int main()
{
int i,j,len;
bool use = false;
c[0] = 0,q[0] = 1,a[0] = 31;
for(i = 1;;i++) //寻找连分数循环节,j-i是最小循环周期
{
c[i] = a[i - 1] * q[i - 1] - c[i - 1];
q[i] = (991 - c[i] * c[i])/q[i - 1];
a[i] = (a[0] + c[i])/q[i];
if(!use)
{
for(j = 0;j i;j++)
{
if(c[i] == c[j] a[i] == a[j] q[i] == q[j])
{
len = i - j;
break;
}
}
if(j i)
break;
}
}
if(len 1) //循环节长度是奇数,长度要乘以2
len = 1;
for(i = 0;i 3;i++)
{
memset(h[i].a,0,sizeof(h[i].a));
memset(k[i].a,0,sizeof(k[i].a));
h[i].len = k[i].len = 0;
}
h[0].a[0] = a[0],h[0].len = 1;
h[1].a[0] = a[0] * a[1] + 1;
h[1].len = 1;
k[0].a[0] = 1,k[0].len = 1;
k[1].a[0] = a[1],k[1].len = 1;
for(i = 2;i len;i++)
go(a[i]);
printf("x = ");
print(h[2]);
printf(" ");
printf("y = ");
print(k[2]);
printf("\n");
system("PAUSE");
return 0;
}
分享名称:用Go语言解方程 go语言逻辑运算符
网页链接:http://ybzwz.com/article/dodgedg.html