笔试题(二)

题目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;
}