由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教一道题 (转载)
相关主题
奇怪的问题:关于一个简单的malloc()小程序 (转载)求助 怎么编辑 多个 .c files(比如a.c, b.c) 和一个.h file(ab (转载)
一个nested class的问题在main()里面创建了几个线程,如何等待所有线程都结束?
计算组合数C(m,n)atof strtod 有什么区别
一个读用户输入的小问题请问一个exception题目
A helloworld OpenMP question?Use Visual .NET for C++ programming
C的argc问题三个C syntax 弱问题
tree data conversion这个C++程序为什么不能运行
问个简单的c程序a question on C++ string
相关话题的讨论汇总
话题: buff话题: parent话题: int话题: num话题: left
进入Programming版参与讨论
1 (共1页)
t***e
发帖数: 446
1
【 以下文字转载自 JobHunting 讨论区 】
发信人: tetee (fatfish), 信区: JobHunting
标 题: 请教一道题
发信站: BBS 未名空间站 (Mon Oct 29 11:50:00 2012, 美东)
如图,每个node都和下面两个临近的node相连,这样的数据结构怎么设计呢?
a*****i
发帖数: 268
2
把它逆时针转90度如何?
d****n
发帖数: 1637
3
All data structure can be single array
my code 见笑了
#include
#include
int main( int argc, char *argv[]){
int i;
//当前的array index
int num=atoi(argv[1]);
//穷举出当先index所在level: i
int sum=0;
for(i=0;sum sum+= i*(i+1)/2 ;

int left,right;
//左面的child index
left=num+i-1;
//右面的 child index
right=num+i;
printf("num %d ; left %d ; right %d\n",num,left, right);
}
//没有parent 计算。
//不用穷举,可以存level的计算于一个临时数组
//另外,这个是杨辉三角吧,所以有O(1)的 deindex
d****n
发帖数: 1637
4
又拓展了一下,给出parent link和buffed level computation
#include
#include
int *buff=NULL;
int buff_size=1024;
int buff_used=0;
int level(int query ){
while( buff[buff_used-1] {
if ( buff_size <=buff_used ){
buff_size<=1;
buff=(int *)realloc( buff,sizeof(int)*buff_size );
}
buff_used++;
buff[buff_used]=(buff_used+1 )*(buff_used+1+1)/2;
}
//binary search
int high,low,mid;
high=buff_used;
low=0;
while( low<=high ){
mid=(low+high)/2;
if(buff[mid]>=query )
high=mid-1;
else
low=mid+1;
}
return low+1;
}
int main( int argc, char *argv[]){
if(buff==NULL) buff=(int *)malloc(sizeof(int)*buff_size);
buff[0]=1;
int i;
int num=atoi(argv[1]);
i=level(num);
int left_child,right_child,left_parent,right_parent;
left_child=num+i-1;
right_child=num+i;
left_parent=num-i;
right_parent=num-i+1;
printf("num %d ; lvl %d\n" ,num, i);
printf("left_child %d ; right_child %d\n", left_child, right_child);
if (level(left_parent)==(i-1))
printf("Exists left Parent %d\n",left_parent);
if (level(right_parent)==(i-1))
printf("Exists right Parent %d\n",right_parent);
free(buff);
}
//output
/*
./a.out 101
num 101 ; lvl 14
left_child 114 ; right_child 115
Exists left Parent 87
Exists right Parent 88
./a.out 7
num 7 ; lvl 4
left_child 10 ; right_child 11
Exists right Parent 4
*/
1 (共1页)
进入Programming版参与讨论
相关主题
a question on C++ stringA helloworld OpenMP question?
定义的struct数组很大时,为什么会出现奇怪的大数字?C的argc问题
char ** pt1和 char * pt2[] 的区别在哪?tree data conversion
int i:1问个简单的c程序
奇怪的问题:关于一个简单的malloc()小程序 (转载)求助 怎么编辑 多个 .c files(比如a.c, b.c) 和一个.h file(ab (转载)
一个nested class的问题在main()里面创建了几个线程,如何等待所有线程都结束?
计算组合数C(m,n)atof strtod 有什么区别
一个读用户输入的小问题请问一个exception题目
相关话题的讨论汇总
话题: buff话题: parent话题: int话题: num话题: left