前言
本文仅用于分享解题思路和交流学习,请勿直接用于复制粘贴完成任务
如有代码错误欢迎评论区批评指出,欢迎友好学习交流。
部分代码有参考网络上搜索到的部分博客所写,非完全来自于本人,如有冒犯请及时联系删除。
为了保证题目的连续性,即使出现重复题目,只需要输出一串文字的没有营养的题,文中依旧会进行记录,望谅解。
也可根据题号方便进行搜索查询。
重庆科技学院给出的1—337题都会尽量一一更新
题目做完了才开始写这篇文章,如有代码疏漏错误无法通过测试欢迎指正
最新更新时间:2022/9/28,23:00
7-1 然后是几点
有时候人们用四位数字表示一个时间,比如
1106
表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为
530
;0 点 30 分表示为030
。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。输入格式:
输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为
530
;0 点 30 分表示为030
。流逝的分钟数可能超过 60,也可能是负数。输出格式:
输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。
输入样例:
1120 110
输出样例:
1310
#include <stdio.h> int main() { // time——起始时间 // change——流逝分钟数 int time, hour, min, change; scanf("%d %d", &time, &change); hour = time / 100; min = time % 100; min += change; hour += min / 60; min %= 60; if (min < 0) { hour--; min += 60; } printf("%d%.2d", hour, min); return 0; }
思路
- 通过单独对分钟数的加减运算后,再判断分钟数是否需要进位,如有负数则需要对小时进行对应减一操作
7-2 发奖金
某企业发放奖金,请你编写程序,帮助出纳员用最少的纸币发放奖金。其中奖金精确到元。
注:纸币面额为 100 元、50 元、20 元、10 元、5 元、2 元和 1 元。输入格式
金额 (以元为单位,小于 10000 的整数)
输出格式
按钞票面额由大到小的顺序输出各种钞票的张数(参见输出样例)
输入样例
5382
输出样例
100元: 53张 50元: 1张 20元: 1张 10元: 1张 5元: 0张 2元: 1张 1元: 0张
#include <stdio.h>
int main(){
int money;
scanf("%d",&money);
int yibai = money/100;
money %= 100;
int wushi = money/50;
money %= 50;
int ershi = money/20;
money %= 20;
int shi = money/10;
money %= 10;
int wu = money/5;
money %= 5;
int er = money/2;
money %= 2;
int yi = money;
if(yibai>9){
printf("100元: %d张\n",yibai);
printf(" 50元: %d张\n",wushi);
printf(" 20元: %d张\n",ershi);
printf(" 10元: %d张\n",shi);
printf(" 5元: %d张\n",wu);
printf(" 2元: %d张\n",er);
printf(" 1元: %d张",yi);
} else{
printf("100元: %d张\n",yibai);
printf(" 50元: %d张\n",wushi);
printf(" 20元: %d张\n",ershi);
printf(" 10元: %d张\n",shi);
printf(" 5元: %d张\n",wu);
printf(" 2元: %d张\n",er);
printf(" 1元: %d张",yi);
}
}
思路
- 依次计算出当前金额能拿到最大面值的张数,从大面额依次往小计算,每次计算后对金额进行对应减去
- 代码中,money/100表示能拿多少张一百元,拿完后,用money对100进行求模运算,得到拿走对应张数的一百元后
还剩下的钱
7-3 推算星期
若告诉你今天是星期几,请问:过几天后是星期几?
请编写程序,输入今天的星期数 w 和所过的天数 n,计算并输出未来这一天的星期数 d。注:用整数值 0 ~ 6 表示星期日、星期一、… 、星期六。
星期 值 星期日 0 星期一 1 星期二 2 星期三 3 星期四 4 星期五 5 星期六 6 输入格式
w 和 n
输出格式
d
注:题目保证 w、n 和 d 的值都在 int 类型的表示范围内。
输入样例
3 100
输出样例
5
#include <stdio.h>
int main(){
long w,n;
long d;
scanf("%ld %ld",&w,&n);
d = (w+n)%7;
printf("%ld",d);
}
思路
- 此题较为容易,只需要把当前星期几加上几天后模7就可以得到答案
- 需要注意本题的坑埋在题中“注”,w和n需要相加,题目只保证w,n在int范围内,却没有保证相加的结果在int范围
所以此题想要全对,则需要把变量数据类型改为范围大于int类型的即可
7-4 逢7击掌
一群人围坐成一圈玩报数的游戏。游戏规则是:
从1开始报数,若遇到7的倍数或者个位为7的数则击掌代替,若犯错则要受罚。可是这些人都太聪明了,竟然没人犯错!请问同样聪明的你,当报数到 n 时,总击掌次数 c 是多少?
输入格式
n
输出格式
c
输入样例
21
输出样例
4
#include <stdio.h>
int main(){
int n,c;
c = 0;
scanf("%d",&n);
c += (n/70)*16;
n %=70;
for (int i = 1; i <= n; ++i) {
if(i%7==0){
c+=1;
} else if(i%10==7){
c+=1;
}
}
printf("%d",c);
}
思路
- 此题方法笔者了解三种方法,文中代码只给出一种,其余两种方法读者可自行摸索
- 根据观察规律可知,每70个数字就需要击掌16次,我们只需要计算出有多少个70再对余下的数字
依次进行求模取余运算即可得知答案
- 另外两种方法为:
1.对每一个数字都采用求取模求余判断法
2.计算出7的倍数的个数和个位为7的个数的和,再减去既是7的倍数个位数又是7的数字的个数
7-5 数油桶(简)
工人师傅将油桶码成如下图所示的梯形,数了数底层的油桶数和层数,就知道有多少油桶了。你知道他是怎么算的吗?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FodtLTdD-1664377675748)(https://images.ptausercontent.com/344)]输入格式
底层油桶数和层数
输出格式
油桶的数量
输入样例
7 4
输出样例
22
#include <stdio.h>
int main(){
int a,b;
scanf("%d %d",&a,&b);
int res = 0;
for (int i = 0; i < b; ++i) {
res +=a;
a-=1;
}
printf("%d",res);
}
思路
- 题中所述层数即为,循环次数,底层油桶数即为第一个需要相加的数字,据图可知,每次减一
所以采用文中所述的循环即可解决问题
- 根据~~小学二年级~~就学过的等差数列求和公式也可使用一条语句即可算出答案,具体公式请读者自行搜索
7-6 聪明的高斯(简)
著名德国数学家高斯(Gauss)上小学时,老师让大家计算:
1+2+3+4+⋯+100= ?当大家都还在埋头做加法时,高斯却最先算出了答案。你知道他是怎么算的吗?
请编写程序,输入正整数 n,计算 s=1+2+3+4+⋯+n,输出 s 的值。
输入格式
n
输出格式
s
输入样例
100
输出样例
5050
#include <stdio.h>
int main(){
int n;
int res = 0;
scanf("%d",&n);
res = (1+n)*n/2;
printf("%d",res);
return 0;
}
思路
- 此题解法同上题,故不再赘述
7-7 快速求和
请编写程序,输入整数 n,快速计算:
输入格式
n
输出格式
s
要求:输出 5 位小数,末位四舍五入。
输入样例1
4
输出样例1
0.80000
输入样例2
300
输出样例2
0.99668
#include <stdio.h>
int main(){
double s=0,n;
scanf("%lf",&n);
s = 1.0-(1.0/(n+1));
printf("%.5lf",s);
return 0;
}
思路
- 根据图中最后一项通项式子,采用循环求解即可
- 文中采用另一种数学公式求解,~~小学二年级~~就学过的的裂项相消法化简式子求得答案,具体请笔者自行搜索
7-8 买U盘
IT 协会举办程序设计竞赛,准备购买 U 盘作奖品。请编写程序,根据活动经费和 U 盘单价预估可购买 U 盘的最大数量。
输入格式
活动经费和 U 盘单价
输出格式
可购买 U 盘的最大数量
输入样例1
807.5 47.5
输出样例1
17
输入样例2
514.7 19.8
输出样例2
25
#include <stdio.h>
int main(){
double m,n;
scanf("%lf %lf",&m,&n);
int res = m/n;
printf("%d",res);
return 0;
}
思路
- 本题采用~~胎教~~就学过的 价格 = 单价 * 数量 该公式可知
- 即 数量 = 价格 / 单价,如有小数int类型自动转换为整数,省去小数部分
7-9 买复印纸
某办公室到年底准备将剩余的办公经费全部用于购买复印纸。请编写程序,输入办公经费的余额和每包复印纸的单价,计算并输出最多可购买多少包复印纸。
输入格式
办公经费的余额和每包复印纸的单价
输出格式
可购复印纸的最大数量
输入样例1
611.2 38.2
输出样例1
16
输入样例2
1369.2 23.4
输出样例2
58
#include <stdio.h>
int main(){
double m,n;
scanf("%lf %lf",&m,&n);
int res = m/n;
printf("%d",res);
return 0;
}
思路
- 据上题思路可知求解过程
7-10 黑白三子棋局
编写程序,输出下面的黑白三子棋的棋局。
输入样例
注:无输入。
输出样例
┏━┯━┯━┓ ┃○│ │○┃ ┠─┼─┼─┨ ┃ │○│●┃ ┠─┼─┼─┨ ┃●│●│ ┃ ┗━┷━┷━┛
注:外框是粗线,内部是细线。棋盘中的空白处是西文空格。
实际显示效果如下:
提示:如果你使用的是 Windows 7/8/10 操作系统,需要对运行窗口进行设置。
- 用鼠标右键点击窗口标题栏,选择“属性”
- 切换到“选项”卡片,选择“使用旧版控制台”
- 切换到“字体”卡片,字体选择“点阵字体”,大小选择“8×16”
- 点击“确定”按钮
#include <stdio.h>
int main(){
printf("┏━┯━┯━┓\n"
"┃○│ │○┃\n"
"┠─┼─┼─┨\n"
"┃ │○│●┃\n"
"┠─┼─┼─┨\n"
"┃●│●│ ┃\n"
"┗━┷━┷━┛");
}
思路
- 直接输出即可
- 不太明白此题用意,滥竽充数,没有营养的题大可不必出现在题库中
7-12 打妖怪
话说孙大圣保唐僧西天取经,路上遇到一妖怪。妖怪共有 v 滴血,大圣每打一棒就能使妖怪失去 h 滴血,妖怪一旦没血就会立即死去。大圣打了 n 棒将妖怪打死。
请编写程序,输入 v 和 h,输出 n。输入格式
v 和 h
输出格式
n
注:题目保证 a、b 和 n 的值都在 int 类型的表示范围内。
输入样例
2510 1000
输出样例
3
#include <stdio.h>
int main(){
int v,h;
scanf("%d %d",&v,&h);
if(v%h==0){
printf("%d",v/h);
} else{
printf("%d",v/h+1);
}
return 0;
}
思路
- 只需要通过求余数为0来判断血量是否为伤害的倍数,如果不是则需要整除后+1就行
7-14 十六进制转十进制
请编写程序,输入十六进制数,输出对应的十进制数。
输入格式
十六进制非负整数
输出格式
对应的十进制非负整数
输入样例
13Ba
输出样例
5050
#include <stdio.h>
int main(){
long n;
scanf("%lx",&n);
printf("%ld",n);
}
思路
- 此题只需要怎么输入怎么输出就行,这样也能满足题意
- 还可以把输入值存入数组,从低位开始使用位权法求值
7-15 十进制转十六进制
请编写程序,输入十进制数,输出对应的十六进制数。
输入格式
十进制非负整数
输出格式
对应的十六进制非负整数
要求:十六进制数中的字母均为大写形式。
输入样例
5050
输出样例
13BA
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
printf("%X",n);
}
思路
- 本题解法和上题同理类似
7-16 旅游派车
某企业组织 n 名职工春游,每辆旅游车可容纳 b 名乘客,需要 k 辆旅游车。请你编写程序,帮助工作人员计算需要派多少辆车。
输入格式
n 和 b
输出格式
k
输入样例
85 36
输出样例
3
#include <stdio.h>
int main(){
int v,h;
scanf("%d %d",&v,&h);
if(v%h==0){
printf("%d",v/h);
} else{
printf("%d",v/h+1);
}
return 0;
}
思路
- 同题7-12打怪同理
7-17 直角坐标->极坐标
请编写程序,输入直角坐标 ( x,y ),输出对应的极坐标 ( r,θ )。
输入格式
( x,y )
输出格式
( r,θ )
注:θ 的单位为弧度,且 −π<θ≤π。
要求:r 和 θ 输出10位有效数字,不输出小数末尾多余的零和小数点。
输入样例1
( -1.29903810567665797, 0.75 )
输出样例1
( 1.5, 2.617993878 )
输入样例2
( -2, -3.4641016151377546 )
输出样例2
( 4, -2.094395102 )
#include <stdio.h>
#include <math.h>
#define PI 3.1415926535
int main() {
double x,y,r,o;
scanf("( %lf,%lf )",&x,&y);
r = sqrt(x*x+y*y);
o = atan2(y,x);
printf("( %.10g, %.10g )",r,o);
return 0;
}
思路
- 题目对编程能力几乎没有考察,只需要了解一点math头文件的函数即可
- 同时还需要对两种坐标转换方法有一定掌握,具体方法请读者自行百度。
7-18 花生换核桃
小松鼠有很多花生,小熊有很多核桃。小松鼠想找小熊换核桃:每 9 颗花生换回 2 颗核桃。
请帮小松鼠算算最多能换得多少核桃?输入格式
花生数
输出格式
核桃数
注:题目保证所有值都在 int 类型的表示范围内。
输入样例
50
输出样例
10
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
printf("%d",(n/9)*2);
return 0;
}
思路
- 只需要求出有多少个9即,n/9,结果乘2得出答案
7-19 装酒
已知酒瓶容量为 b 升,现有 w 升酒,需要 n 只瓶子才能盛下全部这些酒。请编写程序,输入 p 和 t,计算并输出 n。
输入格式
b 和 w
输出格式
n
样例输入1
9.45 85.05
样例输出1
9
样例输入2
0.85 146.6
样例输出2
173
#include <stdio.h>
#include <math.h>
int main(){
double b,w;
scanf("%lf %lf",&b,&w);
if(fmod(w,b) < 0.00001){
printf("%d",(int)(w/b));
}else{
printf("%d",(int)(w/b)+1);
}
}
思路
- 本题坑点在于判断浮点数是否为0,以及取余不能直接用%,需要使用math
头文件的fmod函数,具体解法和同题7-12打怪同理
7-20 学分差
本学期小张完成了 z 个学分,小王完成了 w 个学分,两人相差 s 个学分。
请编写程序,输入 z 和 w,计算并输出 s。输入格式
z 和 w
输出格式
s
输入样例1
17 23
输出样例1
6
输入样例2
25 21
输出样例2
4
#include <stdio.h>
#include <math.h>
int main(){
int z, w, s;
scanf("%d %d", &z, &w);
s = abs(w - z);
printf("%d",s);
}
思路
- 两种解法,if判断是否小于0,然后负号取反即可
- 另一种方法使用abs函数即可
7-21 三角形面积
请编写程序,输入三角形的底 b 和高 h,计算并输出三角形的面积 a。
输入格式
b 和 h
输出格式
a
输入样例
19.77 48.36
输出样例
478.04
#include <stdio.h>
int main(){
double b,h;
scanf("%lf %lf",&b,&h);
printf("%.2lf",b*h/2);
}
思路
- 底乘高除2,输出即可
7-22 求序列平方和
请编写程序,输入正整数 n,计算平方和 s=12+22+32+⋯+n2。
输入格式
整数 n
注:n 在 int 类型范围内,格式限定符采用 %d。
输出格式
实数 s
注:s 在 double 类型范围内,格式限定符采用 %.15g。
输入样例
100
输出样例
338350
#include <stdio.h>
int main(){
double n;
double s=0;
scanf("%lf",&n);
s += (n*(n+1)*(2*n+1))/6;
printf("%.15g",s);
}
思路
- 直接使用数列求和公式即可,循环可能导致超时,使用公式的时间复杂度为O(1)
7-23 求序列立方和
编写程序,输入正整数 n,计算立方和 s=13+23+33+⋯+n3。
输入格式
整数 n
注:n 在 int 类型范围内,格式限定符采用 %d。
输出格式
实数 s
注:s 在 double 类型范围内,格式限定符采用 %.15g。
输入样例
40
输出样例
672400
#include <stdio.h>
int main(){
double n;
double s=0;
scanf("%lf",&n);
s += (n*n*n*n+2*n*n*n+n*n)/4;
printf("%.15g",s);
}
思路
- 见上题
7-24 书香节
当当网每年书香节都推出购书优惠活动:每满100元就减50元。请编写程序,输入你购书的金额,计算并输出可减金额和付款金额。
输入格式
购书金额
输出格式
可减金额
付款金额样例输入1
228.76
样例输出1
100.00 128.76
样例输入2
1000.0
样例输出2
500.00 500.00
注:所有金额都为2位小数。
#include <stdio.h>
int main(){
double x,y;
scanf("%lf",&x);
y = (long)(x/100)*50;
printf("%.2lf\n",y);
printf("%.2lf",x-y);
}
思路
- 求出多少个100乘50得可减金额
- 总价减去可减金额得付款金额
7-25 买U盘(误差修正版)
IT 协会举办程序设计竞赛,准备购买 U 盘作奖品。请编写程序,根据活动经费和 U 盘单价预估可购买 U 盘的最大数量。
输入格式
活动经费和 U 盘单价
输出格式
可购买 U 盘的最大数量
输入样例
660.8 47.2
输出样例
14
输入样例2
504.9 19.8
输出样例2
25
要求:考虑实数的误差。
#include <stdio.h>
int main(){
double m,n;
scanf("%lf %lf",&m,&n);
int res = m/n+0.000001;
printf("%d",res);
return 0;
}
思路
- 这题有点恶心人了,有些测试点会m/n得到一个小数位为类似于.99999的情况,但又会被int类型转换,导致精度损失
故需要加上0.000001来避免误差
7-26 聪明的高斯
著名德国数学家高斯(Gauss)上小学时,老师让大家计算:
1+2+3+4+⋯+100= ?
当大家都还在埋头做加法时,高斯却最先算出了答案。你知道他是怎么算的吗?
请编写程序,输入正整数 n,计算 s=1+2+3+4+⋯+n,输出 s 的值。
输入格式
n
输出格式
s
输入样例
100000
输出样例
5000050000
提示:本题要使用 long long int 类型。
#include <stdio.h>
int main(){
long long int x,r;
scanf("%lld",&x);
r = (x*(x+1))/2;
printf("%lld",r);
}
思路
- 直接上公式,代入即可
7-27 狐狸说葡萄是酸的
请编写程序,输出下面的文字:
The fox says, "I am sure that these grapes are sour."
狐狸吃不到葡萄,就说葡萄是酸的。
输入样例
注:无输入
输出样例
The fox says, "I am sure that these grapes are sour."
#include <stdio.h>
int main(){
printf("The fox says, \"I am sure that these grapes are sour.\"");
}
思路
- 直接输出吧?
7-28 何时空仓
某仓库现存货物 s 箱,每天上午出货 m 箱、下午进货 n 箱,若s≥m>n≥0,则第 k 天将会出现空仓的情况。请你帮仓库管理员编写程序,输入s、m 和 n,计算并输出 k。
输入格式
s,m,n (s≥m>n≥0)
输出格式
k
输入样例
4705 268 193
输出样例
61
#include <stdio.h>
int main(){
int s,m,n,k=0;
scanf("%d %d %d",&s,&m,&n);
while (s>0){
k++;
s-=m;
if(s<=0){
break;
}
s+=n;
}
printf("%d",k);
return 0;
}
思路
- 空仓即s<=0,故设循环条件为s>0,当s<=0时空仓就结束循环
- 每循环一次k自增表示天数加一
- 每天库存减m表示出货后剩余量
- 但如果当进货前s已经满足条件表示当天已经空仓结束循环输出k(天数)即可
7-29 烟囱的高度
已知人离烟囱的距离为 a,人的眼睛离地高度为 b,人看烟囱顶时的仰角为 θ,求烟囱的高度 h。
输入格式
a b θ
注:a、b 的单位为米,均为小数。仰角 θ 的单位为角度,包括度、分和秒数,其中度、分为整数,秒数为小数。
输出格式
h
注:h 的单位为米。
要求:输出2位小数,末位四舍五入。
输入样例
27.8 1.2 32 48 59.5
输出样例
19.13
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
int main() {
double a, b, sec, angle,h;
int degree, min;
scanf("%lf %lf %d %d %lf", &a, &b, °ree, &min, &sec);
// 度数转换
angle = degree + (double)min / 60.0 + sec / 60.0 / 60.0;
// 角度转弧度
angle = angle * PI / 180.0;
//计算
h = b + tan(angle)*a;
printf("%.2lf",h);
return 0;
}
思路
- 数学题,注释已经写清楚了,唯一需要了解的就是tan函数的参数是弧度制
- 此题需要将角度转弧度有一定麻烦
7-30 求矩形面积
已知一个矩形的长和宽,计算该矩形的面积。矩形的长和宽用整数表示,由键盘输入。
输入格式:
输入在一行中给出2个绝对值不超过1000的整数A和B,表示矩形的长和宽。
输出格式:
在一行中输出矩形的面积。
输入样例:
4 3
输出样例:
12
#include <stdio.h>
int main(){
long x,y;
scanf("%ld %ld",&x,&y);
printf("%ld",x*y);
}
思路
- 额,直接长乘宽,为了防止超出范围,用long保险一点
后面题目见专栏吧,一篇写太多了不便于查找!!!
https://blog.csdn.net/qq_57745001/category_12033419.html