【PTA-C语言】编程练习3 - 循环结构Ⅱ

7-9 特殊a串数列求和(分数 15)

给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。

输入格式:
输入在一行中给出不超过9的正整数a和n。

输出格式:
在一行中按照“s = 对应的和”的格式输出。

输入样例:

2 3

输出样例:

s = 246

代码长度限制 16 KB
时间限制 400 ms
内存限制 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)

这是中国古典算术问题,某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。有多少种搬法用N人正好搬N块砖?

输入格式:
输入正整数N。

输出格式:
输出所有满足条件的搬法,每种搬法占一行。

每行按如下格式依次输出该搬法中男人、女人、小孩的人数,按男人人数的递增顺序输出,中间用空格间隔(=前后没有多余的空格,行末也无空格)。

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 ms
内存限制 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 (repeat<10),做repeat次下列运算:

  • 输入一个正整数n(n<10),输出n行数字金字塔。

输出时使用以下语句:

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

输入格式:
输入在第1行中给出1个正整数repeat(repeat<10)
接下来repeat行,每行给出一个正整数n(n<10)

输出格式:
按照对应顺序的n值,依次输出repeat个数字金字塔
(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 ms
内存限制 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)。

输出格式:
每8个一行输出N以内的所有素数。注意每个数据均占5列,且采用右对齐。

输入样例1:

50

输出样例:

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

代码长度限制 16 KB
时间限制 400 ms
内存限制 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以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。

输入格式:
输入第一行中给出两个不超过100的正整数,分别是游戏机产生的随机数、以及猜测的最大次数N。最后每行给出一个用户的输入,直到出现负数为止。

输出格式:
在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。

输入样例:

58 4
70
50
56
58
60
-2

输出样例:

Too big
Too small
Too small
Good Guess!

代码长度限制 16 KB
时间限制 400 ms
内存限制 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)

地球上的一天是 24 小时。但地球上还有一些精力和勤奋度都远超一般人的大神级人物,他们的“一天”是以 48 小时为周期运转的,这种人被人们尊称为“外星人”。比如普通人的周一早 8:30 是外星人的周一早 4:15;普通人的周二早 9:21 是外星人的周一下午 4:40 —— 对外星人而言,一周的工作时间只有三天(即普通人的周一至周六),周日他们会蒙头大睡恢复体力,时间对他们是没有意义的。

在外星人眼里,地球人的时钟对他们而言实在是太不方便了。本题就请你为外星人们实现一款专用时钟。

输入格式:
输入在一行中给出一个不超过 10 的正整数 N,随后 N 行,每行给出一个地球人的时刻,格式为:Day hh:mm,其中Day是 [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 ms
内存限制 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 个正整数,要求你从中得到下列三种计算结果:

  • A1 = 能被 3 整除的最大整数
  • A2 = 存在整数 K 使之可以表示为 3K+1 的整数的个数
  • A3 = 存在整数 K 使之可以表示为 3K+2 的所有整数的平均值(精确到小数点后 1 位)

输入格式:
输入首先在第一行给出一个正整数 N,随后一行给出 N 个正整数。所有数字都不超过 100,同行数字以空格分隔。

输出格式:
在一行中顺序输出 A1、A2、A3的值,其间以 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 ms
内存限制 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;
}

猜你喜欢

转载自blog.csdn.net/qq_45801887/article/details/134773068