基础编程题
题目来源(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
12=2 22=4
13=3 23=6 33=9
14=4 24=8 34=12 44=16
15=5 25=10 35=15 45=20 55=25
16=6 26=12 36=18 46=24 56=30 66=36
17=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,输出从11到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);
如果对这句话不清楚,可以看一下博文
下一篇
链接: 算法实战(四)