算法实战(三)

题目来源(PAT题目)

7-9 用天平找小球

1. 题目

三个球A、B、C,大小形状相同且其中有一个球与其他球重量不同。要求找出这个不一样的球。

输入格式:
输入在一行中给出3个正整数,顺序对应球A、B、C的重量。

输出格式:
在一行中输出唯一的那个不一样的球。

2. 题解

#include<stdio.h>
int main(){
    int A,B,C;
    scanf("%d %d %d",&A,&B,&C);
    if(A==B){ // 说明A和B两个小球值相同
        printf("C");
    }else if(A==C){
        printf("B");
    }else if(B==C){
        printf("A");
    }
    return 0;
}

注意:没有必要用数组进行存储数据,这样的话更不好判断

7-14 求整数段和

1.题目

给定两个整数A和B,输出从A到B的所有整数以及这些数的和。

输入格式:
输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。

输出格式:
首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。

2.题解

#include<stdio.h>

int main() {
    int A, B, count = 0, sum = 0;
    scanf("%d %d", &A, &B);
    for (A; A <= B; A++) {
        printf("%5d", A);
        sum += A;
        count++;	// 每加一个数字,然后count++
        if (count % 5 == 0)
            printf("\n");
    }
    if (count % 5 != 0) // 如果模等于0的话,说明已经换行,此时不需要换行,否则需要换行。
        printf("\n");
    printf("Sum = %d", sum);
    return 0;
}

7-15 计算圆周率

题目

在这里插入图片描述

题解

#include<stdio.h>
#include <math.h>

// 计算阶乘
double Faction(int n) {
    if (n == 0)
        return 1;
    return n * Faction(n - 1);
}

int main() {
    double sum = 0, j = 1, item = 1, threshold;
    int i = 0, k = 1;
    scanf("%lf", &threshold);
    do{
        // 计算出该项,然后再求和
        item = Faction(i) / j;
        sum += item;
        k += 2;
        j = j * k;
        i++;
    } while (item>=threshold);
    printf("%.6lf", 2*sum); // 刚才计算的π/2,求的π的话,需要乘以2
    return 0;
}

7-17 爬动的蠕虫

题目

一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?

这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。

输入格式:
输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。

输出格式:
在一行中输出蠕虫爬出井的时间,以分钟为单位。

题解

#include<stdio.h>

int main(){
    int end=0,N,U,D,time=0;
    scanf("%d %d %d",&N,&U,&D);
    while(end<N){
        end+=U; // 距离加u
        time++; // 时间过一分钟
        if(end>=N) // 如果到达井口就不需要休息,直接结束
            break;
        end-=D; // 距离减D
        time++; // 时间过一分钟
    }
    printf("%d",time);
    return 0;
}

7-19 支票面额

题目:

一个采购员去银行兑换一张y元f分的支票,结果出纳员错给了f元y分。采购员用去了n分之后才发觉有错,于是清点了余额尚有2y元2f分,问该支票面额是多少?

输入格式:
输入在一行中给出小于100的正整数n。

输出格式:
在一行中按格式y.f输出该支票的原始面额。如果无解,则输出No Solution。

分析

出纳员错给了f元y分。采购员用去了n分之后才发觉有错,于是清点了余额尚有2y元2f分
把所有的都转为分列出等式
100f+y-n=200y+2f 经过化简就是题解里面的关系式

题解

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>

int main() {
    int i = 0, f, y,n, count = 0;// count变量用来标志是否有解
    scanf("%d", &n);
    
    for (f = 0; f <= 100; f++) {
        for (y = 0; y <= 100; y++) {
            if (98*f-199*y==n) { // 通过题目列出方程,暴力进行求解
                printf("%d.%d", y, f);
                count++;
            }
        }
    }
    if (count == 0)
        printf("No Solution");
    return 0;
}

7-20 打印九九口诀表

题目

下面是一个完整的下三角九九口诀表:

11=1
1
2=2 22=4
1
3=3 23=6 33=9
14=4 24=8 34=12 44=16
15=5 25=10 35=15 45=20 55=25
1
6=6 26=12 36=18 46=24 56=30 66=36
1
7=7 27=14 37=21 47=28 57=35 67=42 77=49
18=8 28=16 38=24 48=32 58=40 68=48 78=56 88=64
19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 99=81
本题要求对任意给定的一位正整数N,输出从1
1到N*N的部分口诀表。

输入格式:
输入在一行中给出一个正整数N(1≤N≤9)。

输出格式:
输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。

题解

#include<stdio.h>

int main() {
    int i = 1, j, N;
    scanf("%d", &N);
    for (i = 1; i <= N; i++) {
        for (j = 1; j <= i; j++)
            printf("%d*%d=%-4d", j, i, i * j);
        if (i != N)
            printf("\n");
    }
    return 0;
}

补充

printf(“%d*%d=%-4d”, j, i, i * j);
如果对这句话不清楚,可以看一下博文

下一篇

链接: 算法实战(四)

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CPanMirai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值