杭电OJ第11页2075~2079算法题(C语言)
目录
- 2075.A|B?
- 2076.夹角有多大
- 2077.汉诺塔IV
- 2078.复习时间
- 2079.选课时间
2075.A|B?
Problem Description
正整数A是否能被正整数B整除,不知道为什么xhd会研究这个问题,来帮帮他吧。Input
输入数据的第一行是一个数据T,表示有T组数据。
每组数据有两个正整数A和B(A,B<10^9)。Output
对于每组输入数据,输出"YES"表示可以被整除,"NO"表示不能被整除。Sample Input
2
4 2
5 3Sample Output
YES
NO
分析:本题直接判断即可。
#include <stdio.h>void ADivB(){int T;__int64 A,B;scanf("%d",&T);//有T组数据 while(T--){scanf("%I64d%I64d",&A,&B);if(A<0 || A>=1000000000 || B<0 || B>=1000000000){printf("A、B的取值范围为[0,1000000000)之间的整数!\n");continue;}if(A%B==0){printf("YES\n");}else{printf("No\n");}}
}
2076.夹角有多大
Problem Description
时间过的好快,一个学期就这么的过去了,xhd在傻傻的看着表,出于对数据的渴望,突然他想知道这个表的时针和分针的夹角是多少。现在xhd知道的只有时间,请你帮他算出这个夹角。注:夹角的范围[0,180],时针和分针的转动是连续而不是离散的。Input
输入数据的第一行是一个数据T,表示有T组数据。
每组数据有三个整数h(0 <= h < 24),m(0 <= m < 60),s(0 <= s < 60)分别表示时、分、秒。Output
对于每组输入数据,输出夹角的大小的整数部分。Sample Input
2
8 3 17
5 13 30Sample Output
138
75
分析:每过1个小时,时针的夹角变化360o/12=30o;每过1分钟,分针的夹角变化360o/60=6o。此外要注意输出夹角的大小取其整数部分。
#include <stdio.h>
#include <math.h>void IncludedAngle(){int T;int h,m,s;double angh,angm;scanf("%d",&T);//有T组数据 while(T--){scanf("%d%d%d",&h,&m,&s);if(h<0 || h>=24){printf("h的取值范围为[0,24)之间的整数\n");continue;}if(m<0 || m>=60){printf("m的取值范围为[0,60)之间的整数\n");continue;}if(s<0 || s>=60){printf("s的取值范围为[0,60)之间的整数\n");continue;}if(h>=12){h-=12;}//每过1个小时,时针的夹角变化30度;每过1分钟,分针的夹角变化6度 angh=(h+(m*1.0/60)+(s*1.0/3600))*30;angm=(m+(s*1.0/60))*6;if(fabs(angh-angm)>180){printf("%d\n",(int)(360.0-fabs(angh-angm)));}else{printf("%d\n",(int)fabs(angh-angm));}}
}
2077.汉诺塔IV
Problem Description
还记得汉诺塔III吗?他的规则是这样的:不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到小盘的上面。xhd在想如果我们允许最大的盘子放到最上面会怎么样呢?(只允许最大的放在最上面)当然最后需要的结果是盘子从小到大排在最右边。Input
输入数据的第一行是一个数据T,表示有T组数据。
每组数据有一个正整数n(1 <= n <= 20),表示有n个盘子。Output
对于每组输入数据,最少需要的摆放次数。Sample Input
2
1
10Sample Output
2
19684
分析:
(1)hanio[i]表示将i个盘子移动到相邻杆子最少需要的次数。先将上面的i-1个盘子从最左边移动到最右边,则最少需要2*hanio[i-1]次,再将最下面的1个盘子移动到中间,这需要1次。最后将i-1个盘子从最右边移动到中间,最少需要hanoi[i-1]次,所以可以得到hanoi[i]=hanoi[i-1]*2+hanoi[i]+1=hanoi[i-1]*3+1。
(2)而题目所求的是将n个盘子移动到从最左边移动到最右边所需的最少次数,记为min。其移动过程为:先将上面的i-1个盘子从最左边移动到中间(最少需要hanopi[i-1]次),然后再将最下面的盘子移动到中间,然后再移动到最右边(最少需要2次),最后将中间的i-1个盘子移动到最右边(最少需要hanoi[i-1]次),所以加起来最少需要hanoi[n-1]*2+2次。
#include <stdio.h>void Hanoi4(){//hanio[i]:将i个盘子移动到相邻杆子最少需要的次数 __int64 hanoi[21]={0,1};int i,T,n;for(i=2;i<=20;i++){hanoi[i]=hanoi[i-1]*3+1;}//有T组数据 scanf("%d",&T);while(T--){scanf("%d",&n);if(n<1 || n>20){printf("n的取值范围为[1,20]之间的整数!\n");continue;}printf("%I64d\n",2*hanoi[n-1]+2);}
}
2078.复习时间
Problem Description
为了能过个好年,xhd开始复习了,于是每天晚上背着书往教室跑。xhd复习有个习惯,在复习完一门课后,他总是挑一门更简单的课进行复习,而他复习这门课的效率为两门课的难度差的平方,而复习第一门课的效率为100和这门课的难度差的平方。xhd这学期选了n门课,但是一晚上他最多只能复习m门课,请问他一晚上复习的最高效率值是多少?Input
输入数据的第一行是一个数据T,表示有T组数据。
每组数据的第一行是两个整数n(1 <= n <= 40),m(1 <= m <= n)。
接着有n行,每行有一个正整数a(1 <= a <= 100),表示这门课的难度值。Output
对于每组输入数据,输出一个整数,表示最高效率值。Sample Input
2
2 2
52
25
12 5
89
64
6
43
56
72
92
23
20
22
37
31Sample Output
5625
8836
分析:本题只是求其中一个的最大效率,即100和课程难度最小的差的平方。
#include <stdio.h>void review(){int T,n,m,a,efficiency;scanf("%d",&T);//有T组数据 while(T--){//这学期选了n门课,但是一晚上最多只能复习m门课scanf("%d%d",&n,&m);efficiency=100;while(n--){//a表示这门课的难度值 scanf("%d",&a);if(efficiency>a){efficiency=a;}}printf("%d\n",(100-efficiency)*(100-efficiency));}
}
2079.选课时间
Problem Description
又到了选课的时间了,xhd看着选课表发呆,为了想让下一学期好过点,他想知道学n个学分共有多少组合。你来帮帮他吧。(xhd认为一样学分的课没区别)Input
输入数据的第一行是一个数据T,表示有T组数据。
每组数据的第一行是两个整数n(1 <= n <= 40),k(1 <= k <= 8)。
接着有k行,每行有两个整数a(1 <= a <= 8),b(1 <= b <= 10),表示学分为a的课有b门。Output
对于每组输入数据,输出一个整数,表示学n个学分的组合数。Sample Input
2
2 2
1 2
2 1
40 8
1 1
2 2
3 2
4 2
5 8
6 9
7 6
8 8Sample Output
2
445
分析:使用递归较为方便。
#include <stdio.h>//credit[i]表示学分为i的课程的数量
int credit[10],sum,n,k;void calculate(int s,int t){int i,j;if(s==n){sum++;}if(s>n){return;}for(i=t+1;i<10;i++){for(j=1;j<=credit[i];j++){calculate(s+i*j,i);}}
}void curricula(){int T,a,b;scanf("%d",&T);//有T组数据 while(T--){//本学期一共要学n个学分 scanf("%d%d",&n,&k);while(k--){//学分为a的课有b门scanf("%d%d",&a,&b);credit[a]=b;}sum=0;calculate(0,0);printf("%d\n",sum);}
}
杭电OJ第11页2080~2084算法题(C语言)
杭电OJ第11页2075~2079算法题(C语言)相关推荐
- 杭电OJ第11页2035~2039算法题(C语言)
目录 2035.人见人爱A^B 2036.改革春风吹满地 2037.今年暑假不AC 2038.Message 2039.三角形 2035.人见人爱A^B Problem Description 求A^ ...
- 杭电OJ第11页2085~2089算法题(C语言)
目录 2085.核反应堆 2086.A1 = ? 2087.剪花布条 2088.Box of Bricks 2089.不要62 2085.核反应堆 Problem Description 某核反应堆有 ...
- 杭电OJ第11页2065~2069算法题(C语言)
目录 2065."红色病毒"问题 2066.一个人的旅行 2067.小兔的棋盘 2068.RPG的错排 2069.Coin Change 2065."红色病毒" ...
- 蟠桃记c语言当输入0结束循环,杭电OJ第11页2010-2019道题(C语言)
2010. 水仙花数 问题描述 Problem Description 春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: "水仙花数"是指一个三位 ...
- 【ACM】杭电OJ 1004
题目链接:杭电OJ 1004 运行环境:Dev-C++ 5.11 思路: 先把先把num数组全部赋值为1:第一个颜色单独输入,从第二个开始,需要与前面的进行比较,如果前面有相同的颜色,则在目前的nu ...
- 【ACM】杭电OJ 1003。
运行环境VS2017 题目链接:杭电OJ 1003 主要思想是: 用d[i]来存放前i项中最大的和,得到end,然后再倒推,得起始的位置begin 然而在程序42行的疑问,大家可以讨论一下吗???? ...
- 【ACM】杭电OJ 2005
题目链接:杭电OJ 2005 第一次写的时候: #include "stdio.h" int main () {int year,month,day,days,flag;whil ...
- 杭电OJ(HDOJ)入门题目列表
杭电OJ链接: http://acm.hdu.edu.cn/ 注册与使用指南: https://blog.csdn.net/qq_38769551/article/details/101510000 ...
- 杭电oj ——1000 A+B问题
目录 杭电oj使用介绍: 1000 A+B问题 方法一:主函数直接求和 方法二:定义一个ADD函数求和 杭电oj使用介绍: 从今天开始推出新专栏--杭电oj 题库啦.首先附上杭电oj的链接 acm. ...
最新文章
- 2018年超大规模数据中心总数达到430个
- php作业制作htm,PHP作业-HTML-2020-09-28
- sdut 1500 Message Flood(Trie树)
- 不一样的Office 365之 —— 使用Delve查看热门文档
- android-Vibrator的使用
- 最稳定的IDM6.35版本分享
- CASS11.0.0.8 for AutoCAD2010-2023安装教程
- iOS 13 苹果登录实践 Sign In with Apple
- 找软件测试工作自测,测试经验分享:做一个靠谱的软件测试人员
- 期货反向跟单--其实已经很快了
- Win10 系统 C 盘飘红,6 招瞬间腾出十几 GB 空间
- 模拟开关74hc4052的介绍和使用
- 数据治理的数据流程整合
- QCC3040---Glossary
- Libtorch:Linux系统中使用libtorch【下载、解压】【下载的libtorch是编译好的库文件,可直接使用】
- 机器人蛮王_英雄联盟机器人被重做,变身上单霸主,机器人:蛮王、诺手你过来...
- 服务器个人买能干什么_动态vps是干什么用的?拨号VPS的作用功能是什么?
- 第一章 动态规划 状态压缩DP
- 计算机设计大赛国奖作品_6. 测试报告
- 如何制作 rocksmith 2014 歌曲