[PTA-C言語] プログラミング演習 3 - ループ構造 II

7-9 特殊な a 文字列の合計 (小数部 15)

両方とも 9 を超えない 2 つの正の整数 a と n が与えられた場合、a+aa+aaa++⋯+aa⋯a (n a) の合計を求めるプログラムを作成する必要があります。

入力形式:
9 を超えない正の整数 a と n を 1 行に入力します。

出力形式:
「s = 対応する合計」の形式で 1 ​​行に出力します。

入力例:

2 3

出力サンプル:

s = 246

コードの長さ制限 16 KB
時間制限 400 ミリ秒
メモリ制限 64 MB

参照コード

#include <stdio.h>
int main()
{
    
    
    int a, b, sum=0, i, x=0;
    scanf("%d %d", &a, &b);
    for (i = 1; i <= b; i++) {
    
    
        x = x*10 + a;
        sum += x;
    }
    printf("s = %d", sum);
    return 0;
}

7-10 レンガの徹底的な輸送方法 (スコア 15)

これは古典的な中国の算数の問題です。特定の建設現場でレンガを移動する必要があります。男性 1 人でレンガ 3 個、女性 1 人でレンガ 2 個、子供 2 人でレンガ 1 個を移動することが知られています。 N 人を使って正確に N 個のレンガを移動する方法は何通りありますか?

入力形式:
正の整数 N を入力します。

出力形式:
条件を満たすすべての移動方法を 1 行に出力します。

各行は、移動メソッドの男性、女性、子供の数を次の形式で出力します。男性の数が大きい順に、間にスペースを入れます (=スペースの前後に冗長なものはなく、行末にもスペースはありません)。

men=男人数 women=女人数 child=小孩数

条件を満たす移動方法がない場合は「No solution!」と出力されます。

入力例1:

45

出力サンプル 1:

men=0 women=15 child=30
men=3 women=10 child=32
men=6 women=5 child=34
men=9 women=0 child=36

入力例2:

1

出力サンプル 2:

No solution!

コードの長さ制限 16 KB
時間制限 400 ミリ秒
メモリ制限 64 MB

参照コード

#include <stdio.h>
int main()
{
    
    
    int n, i, j, k, t=0;
    scanf("%d", &n);
    for(i=0; i<=n/3; i++)
        for(j=0; j<=n/2; j++){
    
    
            k = (n-i*3-j*2)*2;
            if(i+j+k == n) {
    
    
                printf("men=%d women=%d child=%d\n", i, j, k);
                t=1;
            }
        }
    if(t==0)printf("No solution!\n");
    return 0;
}

7-11 数字のピラミッド (分数 15)

正の整数の繰り返し (repeat<10) を入力し、次の操作を繰り返し実行します。

  • 正の整数 n (n<10) を入力し、デジタル ピラミッドの ​​n 行を出力します。

出力する場合は、次のステートメントを使用します。

  • printf(" ");
  • printf("%d ", i);
  • printf("\n");

入力形式:
入力は最初の行に正の整数を与えます。repeat(repeat<10)
次の繰り返し行、各行は次の値を与えます。正の整数 n(n<10)

出力形式:
対応する順序の n 値に従って、繰り返し番号ピラミッドを順番に出力します
(n の形式-行番号ピラミッドは例に示すとおりです。表示、注: 各数字の後にはスペースが続きます。)

入力例:

2
5
2

出力サンプル:

        1 
      2 2 2 
    3 3 3 3 3 
  4 4 4 4 4 4 4 
5 5 5 5 5 5 5 5 5 
  1 
2 2 2 

コードの長さ制限 16 KB
時間制限 400 ミリ秒
メモリ制限 64 MB

参照コード

#include<stdio.h>
int main()
{
    
    
    int repeat, i=0, n, m, p, q;
    scanf("%d", &repeat);
    for(i=0; i<repeat; i++){
    
    
        scanf("%d", &n);
        for(m=1; m<=n; m++){
    
    
            for(q=n; q>m; q--)
                printf("  ");
            for(p=1; p<=2*m-1; p++)
                printf("%d ", m);
            printf("\n");
        }
    }
    return 0;
}

7-12 N(小数部15)以内の素数をすべて出力します。

N (2≤N≤500) (つまり、N 以下) 内のすべての素数を見つけるプログラム。

入力形式:
整数 N (2≤N≤500) を入力します。

出力形式:
N 以内のすべての素数を 8 行ごとに出力します。各データは 5 列を占め、右揃えであることに注意してください。

入力例1:

50

出力サンプル:

    2    3    5    7   11   13   17   19
   23   29   31   37   41   43   47

コードの長さ制限 16 KB
時間制限 400 ミリ秒
メモリ制限 64 MB

参照コード

#include <stdio.h>
#include <math.h>
int isprime(int n)
{
    
    
    if(n == 1) return 0;
    for(int i = 2; i <= sqrt(n); i++) {
    
    
        if(n % i == 0)
            return 0;
    }
    return 1;
}
int main()
{
    
    
    int i, n, k=0;
    scanf("%d", &n);
    for(i=1; i<=n; i++)
        if(isprime(i)) {
    
    
            k++;
            if(k == 8) {
    
    
                printf("%5d\n", i);
                k=0;
            } else printf("%5d", i);
        }
    return 0;
}

7-13 数字当てゲーム(スコア15)

推測ゲームは、100 以内の正の整数をランダムに生成するゲーム機です。ユーザーは数字を入力してそれを推測します。ランダムに生成された推測された数字と自動的に比較し、「大きすぎます」というプロンプトを表示するプログラムを作成する必要があります。」) 、または小さすぎる (「小さすぎる」)、等しいという意味は推測されます。推測された場合は、プログラムを終了します。このプログラムでは、推測の回数もカウントする必要があります。数字が 1 回推測されると、「ビンゴ!」というメッセージが表示され、3 回以内に数字が推測されると、「ラッキーユー!」というメッセージが表示されます。ただし、N (>3 ) 回以内 (N 回目も含む) に「Good Guess!」というプロンプトが表示され、N 回を超えて推測できなかった場合は、「Game Over」というプロンプトが表示され、プログラムが終了します。 N回に達する前にユーザーが負の数を入力した場合も、「ゲームオーバー」が出力され、プログラムが終了します。

入力形式:
入力の最初の行では、100 を超えない 2 つの正の整数が指定されます。これらは、ゲーム機によって生成された乱数と最大推測数 N です。 。最後に、負の数が表示されるまで、各行に 1 つのユーザー入力が表示されます。

出力形式:
正しい推測結果または「ゲーム オーバー」が出力されるまで、各推測の対応する結果を 1 行で出力します。

入力例:

58 4
70
50
56
58
60
-2

出力サンプル:

Too big
Too small
Too small
Good Guess!

コードの長さ制限 16 KB
時間制限 400 ミリ秒
メモリ制限 64 MB

参照コード

#include <stdio.h>
int main()
{
    
    
    int i, a, n, num = 0, t;
    scanf("%d %d", &a, &n);
    if (n == 0 || n <= 0) {
    
    
        printf("Game Over\n");
        return 0;
    }
    for(i = 1; ;i++) {
    
    
        scanf("%d", &t);
        num++;
        if (num > n || t < 0) {
    
    
            printf("Game Over\n");
            return 0;
        }
        if (t > a) printf("Too big\n");
        if (t < a) printf("Too small\n");
        if (t == a && num == 1) {
    
    
            printf("Bingo!\n");
            break;
        }
        if (t == a && num > 1 && num <= 3) {
    
    
            printf("Lucky You!\n");
            break;
        }
        if (t == a && num > 3 && num <= n) {
    
    
            printf("Good Guess!\n");
            break;
        }
    }
    return 0;
}

7-14 エイリアンの一日 (スコア 15)

地球上の1日は24時間です。しかし、地球上には常人をはるかに超えた行動力と勤勉さを持った神レベルの人々が存在し、彼らの「一日」は48時間周期であり、そのような人々を敬意を込めて「宇宙人」と呼んでいます。たとえば、一般人の月曜日の朝 8 時 30 分は、宇宙人にとっては月曜日の午前 4 時 15 分であり、一般人の火曜日の朝 9 時 21 分は、宇宙人にとっては月曜日の午後 4 時 40 分です。 1週間の時間はたったの3日間(普通の人なら月曜日から土曜日まで)、日曜日に頭をかぶって寝て体力を回復するだけで、彼らにとって時間は無意味です。

宇宙人の目には、地球の時計は不便すぎるのです。この質問では、エイリアン用の特別な時計を実装するように求められます。

入力形式:
入力は 10 を超えない正の整数 N を 1 行に入力し、その後に N 行が続きます。各行は地球人の瞬間を示します。形式は次のとおりです。 Day hh:mmDay は [0, 6] の範囲の整数で、順序は日曜日から土曜日を表します。hh は24 時間 システムの時間数は [0, 23] の範囲の整数です。mm は分数で、[0, 59] の範囲の整数です。

出力形式:
入力地球時間の各行に対して、対応する外国時間を入力と同じ形式で出力します。このうち、Day は日曜日から水曜日に相当する [0, 3] の範囲にあり、分数が整数でない場合は切り捨てられます。注: 宇宙人にとって日曜の時間は意味がないので、地球人の時間をそのまま出力してください。

入力例:

3
1 08:30
2 09:21
0 21:07

出力サンプル:

1 04:15
1 16:40
0 21:07

コードの長さ制限 16 KB
時間制限 400 ミリ秒
メモリ制限 64 MB

参照コード

#include <stdio.h>
int main(){
    
    
    int day, d, h, m;
    scanf("%d", &day);
    while(day--) {
    
    
        scanf("%d %02d:%02d", &d, &h, &m);
        if(d == 0) {
    
    
            printf("%d %02d:%02d\n", d, h, m);
            continue;
        } else if (d % 2 == 1) {
    
    
            d = d/2 + 1;
        } else {
    
    
            d = d/2;
            h += 24;
        }
        m = ((h % 2)*60 + m) / 2;
        h /= 2;
        printf("%d %02d:%02d\n", d, h, m);
    }
    return 0;
}

7-15 整数の分類処理(小数部15)

N 個の正の整数が与えられた場合、次の 3 つの計算結果を取得するように求められます。

  • A1 = 3 で割り切れる最大の整数
  • A2 = 3K+1 と表現できる整数 K が存在する整数の数
  • A3 = すべての整数の平均 (小数点第 1 位までの精度) として 3K+2 として表現できる整数 K が存在します。

入力形式:
入力では、まず 1 行目に正の整数 N が与えられ、次の行に N 個の正の整数が続きます。すべての数値は 100 までであり、行はスペースで区切られます。

出力形式:
A1、A2、A3 の値をスペース 1 つで区切って 1 行に連続して出力します。数値が存在しない場合、対応する出力はNONEです。

入力例1:

8
5 8 7 6 9 1 3 10

出力サンプル 1:

9 3 6.5

入力例2:

8
15 18 7 6 9 1 3 10

出力サンプル 2:

18 3 NONE

コードの長さ制限 16 KB
時間制限 400 ミリ秒
メモリ制限 64 MB

参照コード

#include <stdio.h>
int main()
{
    
    
    int i, n, m, a1=0, a2=0, cnt3=0;
    double sum=0.0;
    scanf("%d", &n);
    for(i=0; i<n; i++) {
    
    
        scanf("%d", &m);
        if(m%3 == 0) {
    
    
            if(a1<m) a1=m;
        }
        else if(m%3 == 1)
            a2++;
        else if(m%3 == 2) {
    
    
            cnt3++;
            sum += m;
        }
    }
    if(a1) printf("%d ", a1);
    else printf("NONE ");
    if(a2) printf("%d ", a2);
    else printf("NONE ");
    if(cnt3) printf("%.1f", sum/cnt3);
    else printf("NONE");
    return 0;
}

Guess you like

Origin blog.csdn.net/qq_45801887/article/details/134773068
Recommended