主要是像记录一下两道编程笔试题。
其中第一题是有关质数的:
对输入的数,当两个质数之和等于该数的时候,输出这样的组合数目。比如给出的输入样例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");
}
两个程序如果有不正确的地方,请大家指正!