程序设计天梯赛校级选拔赛试题集L1- L4

7-1 求玉米亩产量

如图,有一块玉米地,位于一条东西向公路的北侧,南北向公路的东侧。第一个顶点距离南北路750米,东西路550米;第二个顶点距离南北路850米,东西路50米;第三个顶点距离南北路50米,东西路250;第四个顶点距离南北路150米,东西路450米。该块地种植玉米,收获的总产量为120吨,求玉米每亩产量为多少千克?要求编写程序求解该问题。程序设计天梯赛校级选拔赛试题集L1- L4_第1张图片
程序设计天梯赛校级选拔赛试题集L1- L4_第2张图片

编程要求:
程序中至少要有两个函数,函数的功能如下:
(1)编写函数计算两点之间的距离,从而算术图中四边形的四个边的长度以及一个对角线的长的;
(2)根据海伦公式编写一个计算三角向面积的函数;

说明
1平方米=0.0015亩

输入格式:
一行中输入8个实数,每个数之间用空格隔开。从左到右每两个一组,每组表示一个点的横坐标和纵坐标。

输出格式:
输出一个实数,表示玉米的亩产量。输出保留2位小数。

输入样例:
750 550 850 50 50 250 150 450
输出样例:
326.53

#include 
#include 
double d(double x1,double y1,double x2,double y2)
{
     
    double d;
    d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    return d;
}
double area(double L1,double L2,double L3)
{
     
    double p,area;
    p=0.5*(L1+L2+L3);
    area=sqrt(p*(p-L1)*(p-L2)*(p-L3));
    return area;
}
int main()
{
     
  double xA,yA,xB,yB,xC,yC,xD,yD;
  double AB,AD,BD,CD,BC;
  double area1,area2,sum=0,Ssum;
  scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&xA,&yA,&xB,&yB,&xC,&yC,&xD,&yD);
  AB=d(xA,yA,xB,yB);
  AD=d(xA,yA,xD,yD);
  BD=d(xB,yB,xD,yD);
  CD=d(xC,yC,xD,yD);
  BC=d(xB,yB,xC,yC);
  //printf("%f %f %f %f %f \n",AB,AD,BD,CD,BC);
  area1=area(AB,AD,BD);
  area2=area(BD,CD,BC);
  //printf("%f %f\n",area1,area2);
  sum=area1+area2;
  Ssum=sum*0.0015;
  printf("%.2f",120000/Ssum);
    return 0;
}

程序设计天梯赛校级选拔赛试题集L1- L4_第3张图片

7-2 判断给定整数是否素数[编程题]

素数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。本题要求编写程序,判断从键盘输入的数是否素数。如果是素数,输出XX is prime number.的信息,输出XX is not prime number.的信息。
编写程序要求:
编写一个函数IsPrime()来判断素数。如果是素数,函数的返回值就是该数,否则函数的返回值为0.
程序设计天梯赛校级选拔赛试题集L1- L4_第4张图片

输入格式:
在一行中输入一个非负整数.

输出格式:
在一行输出XX is prime number. 或者 XX is not prime number.的信息。

输入样例1:
5
输出样例1:
5 is prime number.
输入样例2:
121
输出样例2:
121 is not prime number.

#include 
#include 
int isPrime(int number)
{
     
    int i;
    if(number==1) return 0;
    else
        for(i=2;i<sqrt(number);i++)
            if(!(number%i)) return 0;
    return number;
}
int main()
{
     
    int n;
    scanf("%d",&n);
    if(isPrime(n)) printf("%d is prime number.",n);
    else printf("%d is not prime number.",n);
    return 0;
}

程序设计天梯赛校级选拔赛试题集L1- L4_第5张图片

7-3 N个数求和

本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

输入格式
输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1 a2/b2 …给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

输出格式:
输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。
程序设计天梯赛校级选拔赛试题集L1- L4_第6张图片

输入样例1:
5
2/5 4/15 1/30 -2/60 8/3
输出样例1:
3 1/3
输入样例2:
2
4/3 2/3
输出样例2:
2
输入样例3:
3
1/3 -1/6 1/8
输出样例3:
7/24

#include 
#include 
#include 
int gcd(int q,int b)
{
     
    int r;
    r=q%b;
    while(r)
    {
     
        q=b;
        b=r;
        r=q%b;
    }
    return b;
}
int main()
{
     
    int N,i,m;
    long long int sum1=0,sum=1;
    scanf("%d\n",&N);
    int a,b;
    for(i=0;i<N;i++)
    {
     
        scanf("%d/%d",&a,&b);
        sum1*=b;
        sum1+=a*sum;
        sum*=b;
        m=gcd(sum1,sum);
        sum1/=m;
        sum/=m;
    }
    //printf("%d %d\n",sum1,sum);
    if(sum1%sum==0) printf("%lld",sum1/sum);
    else if(sum1&&(sum1<sum)) printf("%lld/%lld",sum1,sum);
    else printf("%lld %lld/%lld",sum1/sum,sum1%sum,sum);
    return 0;
}

程序设计天梯赛校级选拔赛试题集L1- L4_第7张图片

7-4 求A除以B的商与余数

计算A/B的商和余数,其中被除数A是不超过1000位的非负整数,除数B是一个不超过int类型取范围的任意非负整数。要求你输出商Q和余数R。

输入格式:
输入在一行中依次给出 A 和 B,中间以空格分隔。

输出格式:
在一行中依次输出 Q 和 R,中间以空格分隔。
程序设计天梯赛校级选拔赛试题集L1- L4_第8张图片

输入样例:
1234567891234567893 23
输出样例:
53676864836285560 13

#include 
#include 
#include 
int main()
{
     
    char a[1001];//被除数
    int b[1001];//存商
    int B,i=0,R=0,n,k=0;
    scanf("%s",a);
    scanf("%d",&B);
    n=strlen(a);
    while(a[i]=='0'&&i<n)//被除数前边可能以零开头,计零个数
        i++;
    for(;i<n;i++)
    {
     
        R=R*10+(a[i]-'0');
        b[k++]=R/B;
        R%=B;
    }
    if(k==1) printf("%d %d",b[0],R);//如果是商是一位数,直接输出
    else
    {
     
        i=0;
        while(b[i]==0&&i<k)
            i++;
        for(;i<k;i++)
             printf("%d",b[i]);
        printf(" %d",R);
    }
    return 0;
}

程序设计天梯赛校级选拔赛试题集L1- L4_第9张图片

郑大佬提供的参考答案,嘤嘤嘤

#include 
#include 
#include 
int main()
{
     
    char a[1001]={
     '\0'};//被除数
    int B,i=0,r=0,k=0,sign=0,flag=0;
    scanf("%s %d",a,&B);
    while(a[i]=='0'&&i<strlen(a))
        i++;
    for(;i<strlen(a);i++)
    {
     
        r=r*10+(a[i]-'0');
        if(r<B&&sign==1)
        {
     
            printf("0");
            flag=1;
        }
        if(r>=B)
        {
     
            printf("%d",r/B);
            r%=B;
            sign=1;
            flag=1;
        }

    }
    if(flag) printf(" %d",r);
    else printf("0 %d",r);
    return 0;
}

程序设计天梯赛校级选拔赛试题集L1- L4_第10张图片

你可能感兴趣的:(PTA,C语言)