2016年9月11日 腾讯校招在线笔试

来源:互联网 发布:重庆网络推广平台 编辑:程序博客网 时间:2024/05/16 14:25

主要是像记录一下两道编程笔试题。
其中第一题是有关质数的:
对输入的数,当两个质数之和等于该数的时候,输出这样的组合数目。比如给出的输入样例10,输出2(表示有两组这样的组合:5+5,3+7)
在编程的时候,思路是先一个对数据进行质数验证的函数:int zhishu_verify(int num)
然后逐个对满足和为输入数的组合进行是否均为质数的验证,如果均满足的话那就对计数器加1。

#include<stdio.h>#include<iostream>int zhishu(int input){    int jj;    for(jj = 2;jj<(input / 2) + 1;jj++)    {        if(0 == input % jj)        {            return 1;//////fanhui 1 biaoshi bushi zhishu        }    }    return 0;}void main(void){    int num;    int flg1;    int flg2;    int ii;    int result = 0;    scanf("%d",&num);    for(ii = 2;ii<(num / 2) + 1;ii++ )    {        flg1 = zhishu(ii);        flg2 = zhishu(num - ii);        if((flg1 == 0) && (flg2 == 0))/////biaoshi liangge doushi zhishu        {            result = result + 1;        }    }    printf("%d\n",result);    system("pause");}

第二个题目是什么geohash编码的一部分,就是限定区间[-90,90],然后对数据进行类似于二分法的编码,但是精度为6(我的理解就是只取编码的前6位),比如输入样例80
step1:划分[-90 0],[0 90],属于右端,打印1;
step2:划分[0 45]和[45 90],属于右端,打印1;
step3:划分[45 67]和[67 90],属于右端,打印1;
step4:划分[67 78]和[78 90],属于右端,打印1;
step5:划分[78 84]和[84 90],属于左端,打印0;
step6:划分[78 81]和[81 84],属于左端,打印0;
这个整个的思路就是一个二分的过程,所以可以借鉴二分的程序,采用递归的方式。加入6位精度的限制,在递归的开始进行判断。

#include<stdio.h>#include<iostream>int binary(int* a,int low,int high,int cnt){    if(cnt == 0)    {        return -1;    }    int mid = (high + low) / 2;    if(*a >= mid)    {        printf("%d",1);        low = mid;        cnt = cnt - 1;        binary(a,low,high,cnt);    }    else    {        printf("%d",0);        high = mid;        cnt = cnt - 1;        binary(a,low,high,cnt);    }    return 0;}void main(void){    int num;    scanf("%d",&num);    int high = 90;    int low = -90;    int cnt = 6;    binary(&num,low,high,cnt);    printf("\n");    system("pause");}

两个程序如果有不正确的地方,请大家指正!

0 0
原创粉丝点击