面试题继续【3】

来源:互联网 发布:上海聚到网络是培训吗 编辑:程序博客网 时间:2024/05/17 02:53

1.单链表的逆致,这个用到前面的链表操作函数,主要的思路,从头部一个个去下链表的节点,在采用新的链表采用头插法插入链表便实现了链表的逆致,代码很简单如下

/**倒置一个单链表
*/
void* nzlb(LList* ls){
    LList tmp;
    initallist(&tmp);
    LNode* pnode=ls->head->next;
    while(pnode!=NULL){
        insert2head(&tmp,pnode->data);
        pnode=pnode->next;
        deletebyindex(ls,1);
    }
    watchthelist(&tmp);
}


2.哥德巴赫猜想,这个算法相对简单,就不多说直接上代码,解释下什么叫哥德巴赫猜想猜想:就是说从前有一个伟大的数学家,任一大于2的偶数,都可表示成两个素数之和,这个想法是不是很无聊,但是难倒了一大片数学家来证明。

#include <stdio.h>
#include <stdlib.h>
#include<math.h>


#define TRUE 1
#define FALSE 0


typedef int BOOL;


/**
 *核心函数
 */


void gdbh(int num){
    int i=0;
    int geater;
    int prim1,prim2;
    int tmp1,tmp2;


    for(prim1=3;prim1<num/2;prim1+=2){
        if(ss(prim1)){
            prim2=num-prim1;
            if(ss(prim2)){
                printf("根据哥德巴赫猜想拆开结果为:【%d+%d=%d】\n",prim1,prim2,num);


            }
        }
    }
}


/**
 *  判断一个数是不是素数
 *  返回真假
 */
 BOOL ss(int num){
    int i=0;
    for(i=2;i<sqrt((float)num)+1;i++){
        if(num==num/i*i){
            return FALSE;
        }
    }
    return TRUE;
}


int main()
{
    gdbh(1002);
    return 0;
}
0 0
原创粉丝点击