三角形数字
n=(n+1)/2 1 , 3 , 6 , 10 , 15 …
五边形数字
n=n(3n-1)/2 1 , 5 , 12 , 22 , 35 …
六边形数字
n=n(2n-1) 1 , 6 , 15 , 28 , 45…
40755 是三个的共同数字
找出他
代码:
#include <stdio.h>
typedef long long ll;
ll sj_num(ll n)
{
return (n+1)/2;
}
ll wb_num(ll n)
{
return n*(3*n-1)/2;
}
ll lb_num(ll n)
{
return n*(2*n-1);
}
ll find_num(ll (*arr) (ll),ll n,ll x)
{
ll head=1 , tail=n ,mid;
while(head<=tail)
{
mid=(head+tail) >>1;
if(arr(mid) == x) return mid;
if(arr(mid) < x) head = mid +1;
else tail=mid-1;
}
return -1;
}
int main()
{
ll n=4;
ll temp=0;
while(1)
{
++n;
temp=sj_num(n);
if(find_num(wb_num,temp,temp) == -1) continue;
if(find_num(lb_num,temp,temp) == -1) continue;
printf("%lld",temp);
break;
}
return 0;
}
运行结果

注意:
- 看大小觉得类型是int 还是 long long
- 函数指针和数组不分家,某种意义上说 函数决定数组是什么样的
- #define进行简单的进行字符串替换。 #define宏定义可以使用#ifdef、#ifndef等来进行逻辑判断,还可以使用#undef来取消定义
- typedef是为一个类型起新名字
- typedef只能定义数据类型别名 define是宏定义可以写函数和定义一些常数 两者不冲突
- 指针函数 类型 名字*(参数类型)
拓展:
typedef char* pStr1;
#define pStr2 char*
pStr1 s1, s2;
pStr2 s3, s4;
在上述的变量定义中,s1、s2、s3都被定义为char类型;但是s4则定义成了char类型,而不是我们所预期的指针变量char,这是因为#define只做简单的字符串替换,替换后的相关代码等同于为
char* s3, s4;
而使用typedef为char*定义了新类型pStr1后,相关代码等同于为
char *s3, *s4;
本文介绍了一种寻找同时属于三角形数、五边形数及六边形数的算法实现。通过C语言程序,利用二分查找定位这些特殊数字,并最终找到40755作为共同数字的一个实例。
2139

被折叠的 条评论
为什么被折叠?



