笔试题(二)
笔试题(二)
题目1
给定一个正整数n,求满足i+j=n的质数对的个数。比如10,有两组(i,j)满足条件,分别为(3,7)、(5,5)。
样例输入:
10
样例输出
2
程序代码:
#include<stdio.h>
#include<math.h>
int isPrime(int n);
int main()
{
int n;
int i=2,j=n-i;
int count = 0;
scanf("%d",&n);
while(i<=j)
{
if(isPrime(i)&&isPrime(j))
count++;
i++;
j=n-i;
}
printf("%d",count);
}
int isPrime(int n)
{
int i;
if(n<2)
return 0;
else if(n==2||n==3)
return 1;
else
{
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
return 0;
}
}
return 1;
}
题目2
给定一个整数n(-90<=n<=90),按照如下规则编码,输出编码后的结果(编码精度为6)。
假设输入80.
1.将[-90,90]分为两个区间[-90,0)、[0,90]。80落在右区间,编码取1。
2.将[0,90]分为两个区间[0,45)、[45,90]。80落在右区间,编码取1。
3.将[45,90]分为两个区间[45,67)、[67,90]。80落在右区间,编码取1。
4.将[67,90]分为两个区间[67,78)、[78,90]。80落在右区间,编码取1。
5.将[78,90]分为两个区间[78,84)、[84,90]。80落在左区间,编码取0。
6.将[78,84]分为两个区间[78,81)、[81,84]。80落在左区间,编码取0。
6位精度已经得到了,因此80编码后的结果为111100
程序代码:
#include<stdio.h>
int main()
{
char encode[10];
int max=90,min=-90,mid=0;
int n,count=0;
scanf("%d",&n);
while(count<6)
{
if(n<mid)
{
encode[count]='0';
max=mid;
mid=(min+max)/2;
}
else
{
encode[count]='1';
min = mid;
mid= (min+max)/2;
}
count++;
}
encode[count]='\0';
printf("%s",encode);
return 0;
}