目录

  • 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语言)相关推荐

  1. 杭电OJ第11页2035~2039算法题(C语言)

    目录 2035.人见人爱A^B 2036.改革春风吹满地 2037.今年暑假不AC 2038.Message 2039.三角形 2035.人见人爱A^B Problem Description 求A^ ...

  2. 杭电OJ第11页2085~2089算法题(C语言)

    目录 2085.核反应堆 2086.A1 = ? 2087.剪花布条 2088.Box of Bricks 2089.不要62 2085.核反应堆 Problem Description 某核反应堆有 ...

  3. 杭电OJ第11页2065~2069算法题(C语言)

    目录 2065."红色病毒"问题 2066.一个人的旅行 2067.小兔的棋盘 2068.RPG的错排 2069.Coin Change 2065."红色病毒" ...

  4. 蟠桃记c语言当输入0结束循环,杭电OJ第11页2010-2019道题(C语言)

    2010. 水仙花数 问题描述 Problem Description 春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: "水仙花数"是指一个三位 ...

  5. 【ACM】杭电OJ 1004

     题目链接:杭电OJ 1004 运行环境:Dev-C++ 5.11 思路: 先把先把num数组全部赋值为1:第一个颜色单独输入,从第二个开始,需要与前面的进行比较,如果前面有相同的颜色,则在目前的nu ...

  6. 【ACM】杭电OJ 1003。

    运行环境VS2017  题目链接:杭电OJ 1003 主要思想是: 用d[i]来存放前i项中最大的和,得到end,然后再倒推,得起始的位置begin 然而在程序42行的疑问,大家可以讨论一下吗???? ...

  7. 【ACM】杭电OJ 2005

     题目链接:杭电OJ 2005 第一次写的时候: #include "stdio.h" int main () {int year,month,day,days,flag;whil ...

  8. 杭电OJ(HDOJ)入门题目列表

    杭电OJ链接: http://acm.hdu.edu.cn/ 注册与使用指南: https://blog.csdn.net/qq_38769551/article/details/101510000 ...

  9. 杭电oj ——1000 A+B问题

    目录 杭电oj使用介绍: 1000  A+B问题 方法一:主函数直接求和 方法二:定义一个ADD函数求和 杭电oj使用介绍: 从今天开始推出新专栏--杭电oj 题库啦.首先附上杭电oj的链接 acm. ...

最新文章

  1. 2018年超大规模数据中心总数达到430个
  2. php作业制作htm,PHP作业-HTML-2020-09-28
  3. sdut 1500 Message Flood(Trie树)
  4. 不一样的Office 365之 —— 使用Delve查看热门文档
  5. android-Vibrator的使用
  6. 最稳定的IDM6.35版本分享
  7. CASS11.0.0.8 for AutoCAD2010-2023安装教程
  8. iOS 13 苹果登录实践 Sign In with Apple
  9. 找软件测试工作自测,测试经验分享:做一个靠谱的软件测试人员
  10. 期货反向跟单--其实已经很快了
  11. Win10 系统 C 盘飘红,6 招瞬间腾出十几 GB 空间
  12. 模拟开关74hc4052的介绍和使用
  13. 数据治理的数据流程整合
  14. QCC3040---Glossary
  15. Libtorch:Linux系统中使用libtorch【下载、解压】【下载的libtorch是编译好的库文件,可直接使用】
  16. 机器人蛮王_英雄联盟机器人被重做,变身上单霸主,机器人:蛮王、诺手你过来...
  17. 服务器个人买能干什么_动态vps是干什么用的?拨号VPS的作用功能是什么?
  18. 第一章 动态规划 状态压缩DP
  19. 计算机设计大赛国奖作品_6. 测试报告
  20. 如何制作 rocksmith 2014 歌曲

热门文章

  1. SpringBoot使用RXTX连接串口教程及遇到的坑总结
  2. jQuery遍历——过滤
  3. 中医针灸学综合练习题库【6】
  4. swaks伪造钓鱼邮件
  5. 【SSL】2128可可摘苹果
  6. 神经性脚臭案例整理(二)
  7. 如何在 Git 中保存用户名和密码?
  8. 驾考 科目一 复习的内容
  9. 开发一款桌面程序。文件转换器
  10. Windows 10系统下查看硬盘类型的方法