プログラムデザインラダートーナメントテスト質問セットL1-L4

7-11muあたりのトウモロコシの収量を求める

写真のように、東西高速道路の北側と南北高速道路の東側にトウモロコシ畑があります。最初の頂点は南北道路から750メートル、東西道路から550メートル、2番目の頂点は南北道路から850メートル、東西道路から50メートル、3番目の頂点は50メートルです。南北道路から250メートル、東西道路から250メートル。4番目の頂点は南北からです。道路は150メートル離れており、東西道路は450メートル離れています。この区画にはトウモロコシが植えられており、総収穫量は120トンですが、1ムーあたりのトウモロコシの収穫量はどのくらいですか。問題を解決するためのプログラムを書く必要があります。ここに画像の説明を挿入
ここに画像の説明を挿入

プログラミング要件プログラム
には少なくとも2つの関数が必要です。関数の関数は次のとおりです。
(1)2点間の距離を計算する関数を記述し、四辺形の4辺の長さが算術グラフと対角線の長さ;
(2)ヘレンの式に従って三角測量面積を計算する関数を書く。

説明
1平方メートル= 0.0015エーカー

入力形式:
各数値の間にスペースを入れて、1行に8つの実数を入力します左から右への2つのグループ。各グループは、ポイントの横座標と縦座標を表します。

出力形式:
1ムーあたりのトウモロコシの収量を表す実数を出力します出力は小数点以下2桁を保持します。

入力サンプル 750550850
50 50250150450
出力サンプル:
326.53

#include <stdio.h>
#include <math.h>
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;
}

ここに画像の説明を挿入

7-2与えられた整数が素数であるかどうかを判断する[プログラミングの質問]

素数とは、1を除いて他の自然数で割り切れない数と、1より大きい自然数の中でそれ自体を指します。この質問では、キーボードから入力した数字が素数であるかどうかを判断するプログラムを作成する必要があります。素数の場合は、XXが素数であるという情報を出力し、XXが素数ではないという情報を出力します。
プログラミング要件:
素数を決定する関数IsPrime()を記述します。素数の場合、関数の戻り値はその数です。それ以外の場合、関数の戻り値は0です。
ここに画像の説明を挿入

入力形式
1行に負でない整数を入力します

出力形式:
情報XXが素数またはXXが素数ではない情報を1行で出力します。

入力例1:
5
出力例1:
5は素数
入力例2:
121
出力例2:
121は素数ではありません。

#include <stdio.h>
#include <math.h>
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;
}

ここに画像の説明を挿入

7-3N個の合計

この質問の要件は非常に単純です。つまり、N個の数の合計を求めます。問題は、これらの数値が有理数の分子/分母の形式で与えられ、出力する合計も有理数の形式でなければならないことです。

入力形式
最初の行を入力して、正の整数N(≤100)を指定します。次の行は、a1 / b1 a2 / b2 ...の形式でN個の有理数を示しています。すべての分子と分母が長整数の範囲内にあることを確認してください。さらに、分子の前に負の数の符号を表示する必要があります。

出力形式:
上記の数値の合計の最も単純な形式を出力します。つまり、結果は分数の整数部分として書き込まれ、小数部分は小数/分母として書き込まれます。分子は以下の値である必要があります。分母であり、共通の要素はありません。結果の整数部分が0の場合、小数部分のみが出力されます。
ここに画像の説明を挿入

入力例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 <stdio.h>
#include <string.h>
#include <math.h>
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;
}

ここに画像の説明を挿入

7-4AをBで割った商と余りを求めます

A / Bの商と剰余を計算します。ここで、被除数Aは1000桁以下の非負の整数であり、除数Bはint型の範囲を超えない非負の整数です。商Qと剰余Rを出力する必要があります。

入力形式
スペースで区切って、AとBを1行で入力します

出力フォーマット:
QとRをスペースで区切って1行に順番に出力します。
ここに画像の説明を挿入

入力サンプル:
1234567891234567893 23
出力サンプル:
53676864836285560 13

#include <stdio.h>
#include <string.h>
#include <math.h>
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;
}

ここに画像の説明を挿入

鄭氏から提供された参照回答、嘤嘤嘤

#include <stdio.h>
#include <math.h>
#include <string.h>
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;
}

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_52765554/article/details/115188382