沧海竞舟-热身赛II 题解(上)

这次的热身赛情况依旧是不够理想,很多人连一半的题目都没完成。(鉴于这两场热身赛的效果不佳,我决定将之后的热身赛的题量缩减至4题!)
这场热身赛10道编程题,我很难一口气把题解写完,所以就先写1-5题吧。

7-1 圣经数(2005慈溪)
人们把l 53叫做“圣经数”,因为153具有一个有趣的性质:任写一个3的倍数, 把各位数字的立方(一个数的立方=三个该数相乘的结果,如5^3=5 5 5=125)相加,得出和, 再把和的各位数字立方相加,如此反复进行,最后则必然出现l 5 3。 例如:2 4是3的倍数,按照上述规则,进行变换的过程是: 24→2X2X2+4X4X4→72→7X7X7+2X2X2→351→3X3X3+5X5X5+1X1X1→153 经过3次变换,153出现了!请编一程序,输入某一3的倍数,输出变换成153所需要的次 数。

输入格式:
第一行读入某一3的倍数。

输出格式:
输出文件只有一行,即为变换成153所需要的次数。

输入样例:

12

输出样例:

5

很容易看出,这题涉及到循环嵌套的应用,一道典型的签到题。(不过在测试样例中当输入为153时,输出为1,因此建议用do while语句避免出现失误)
本题的python版AC代码由岳扬写出,特此表扬!

C版代码:

#include<stdio.h>
int main(){int n,s,sum=0,p;scanf("%d",&n);do{                   //注意应该用do while语句,如果用while需要处理特殊情况sum++;s=0;while(n){p=n%10;       //截取个位数s+=p*p*p;     //将该数立方n/=10;        }n=s;}while(n!=153);printf("%d",sum);
}

python版代码:

import sys
i=input()
wei=len(i)
cnt=0
sum=0
i=eval(i)
if i==153:print(1)sys.exit()
while i!=153:for j in range(1,wei+1):k=i%10i=int(i/10)sum+=pow(k,3)i=int(sum)sum=0i=str(i)wei=len(i)i=int(i)cnt+=1
print(cnt)

有兴趣可以看看岳扬的博客:
【PTA】7-1 圣经数(2005慈溪)

7-2 取石子(一)
Tom 和 Mary 玩取石子的游戏:n 颗石子码成一堆,从 Tom 开始,两人轮流取石子,最少取 1 颗、最多取 2 颗,谁取到最后一颗石子,谁就获胜。两个人都极聪明,不会放过任何取胜的机会。请同样聪明的你编写程序,输入石子的数量,输出胜者的名字。

输入格式
石子的数量

输出格式
胜者的名字

输入样例1

1

输出样例1

Tom

输入样例2

2

输出样例2

Tom

输入样例3

3

输出样例3

Mary

可以看做是博弈论类型的题目。两个人按规则取石子,根据博弈论的一些知识和生活经验就可以推出当石子数量为3的倍数时,后手胜出,反之则先手胜出。

#include<stdio.h>
int main(){int n;scanf("%d",&n);if(n%3==0)printf("Mary");elseprintf("Tom");
}

7-3 进度条

进度条常用来在用户进行较长等待时显示某工作的进度以改善用户的体验。请编写程序,利用随机函数,产生指定次数(从键盘上输入次数,并以它作随机种子)的进度条。

输入格式:
输入一个正整数用来指定显示进度条的个数(同时用这个数作srand()的随机种子)

输出格式:
一个进度条的显示是这样的: 1) 利用1+rand() %35来产生一个随机进度; 2) 这个进度用35个字符来占位,已完成的用若干个>表示,未完成的用若干.表示; 3) 最后显示进度的百分比(数据占三位,只保留整数部分)。

输入样例:

6

输出样例:

>>>>>>>>>>>>>>>>>>>>>>............. 63%
>>>>>>............................. 17%
>>>>>>>>........................... 23%
>>>>>>>>>>>>>>>>>>>>>>>>>>......... 74%
>>>>>>>>>.......................... 26%
>>>>>>>>>>>........................ 31%

需要用到随机函数rand()和生成随机种子的函数srand(),利用函数的特性生成随机数。
如果你知道怎么生成随机数了,这题对你来说难度就大大降低了。

#include<stdio.h>
#include<stdlib.h>
int main(){int n,lv,S=35;double f;scanf("%d",&n);srand(n);                   //生成随机种子for(int i=1;i<=n;i++){lv=1+rand()%35;         //生成随机数for(int j=1;j<=S;j++){if(j<=lv)printf(">");elseprintf(".");}f=(double)lv*100/S;printf("%3.0f%%\n",f);  //注意输出格式}
}

7-4 过河

有一条河,河中有n块石头,现在从河的一边只能通过走石头到达对岸,每一步可以跨越至多3个石头。
但是不幸的是,有一块石头被上一个过河的人踩松后被踩松了,所以为了安全后来的人就不能再踩这一块石头了。
若现在有一个人想要到河的对岸去,他有多少种方法?
注:若我们将石头从 1 到 n进行编号的话,那么被踩松的石头编号为 k。

输入格式:
多组输入
对于每组输入在一行中给出 2 个整数 n 和 k。
数据保证有 1≤k<n≤10​^6​​。

输出格式:
对于每组输入,输出一行,代表对应输入的过河方案数。
结果对 998244353 取余后输出。

输入样例:

4 3

输出样例:

3

需要根据题意创建数组a,建立递推式,不过需要特别注意的是对结果取余和被踩松的石头的处理。(踩松的石头在1,2,3号为特殊情况,其余条件下只需a[1]=1,a[2]=2,a[3]=4,将踩松的石头赋值为0,之后利用递推式计算a[i]=a[i-1]+a[i-2]+a[i-3]即可)

#include<stdio.h>
int main(){long long n,k,a[1000009];while(~scanf("%lld %lld",&n,&k)){if(k==1){         //特殊处理a[1]=0;a[2]=1;a[3]=2;}else if(k==2){    //特殊处理a[1]=1;a[2]=0;a[3]=2;}else if(k==3){    //特殊处理a[1]=1;a[2]=2;a[3]=0;}else{a[1]=1;a[2]=2;a[3]=4;}for(int i=4;i<=n;i++){if(i!=k)a[i]=(a[i-1]+a[i-2]+a[i-3])%998244353;   //建立递推式,别忘了对结果取余elsea[i]=0;}printf("%lld\n",a[n]%998244353);}
}

7-5 最大公约数

给出整数a,b,m,n,p,且a和b互质,a>b,求a ^m-b ^m​和a ^n-b ^n​的最大公约数模p的结果。

输入格式:
输入在一行中包含5个32位无符号整数a,b,m,n和p,且p>1。

输出格式:
输出在一行中给出计算结果。

输入样例1:
8 7 5 4 100

输出样例1:
1

输入样例2:
11 5 6 3 20

输出样例2:
6

这题需要了解下快速幂的应用和数论的相关知识。要求a ^m-b ^m​和a ^n-b ^n​的最大公约数,就将该问题转换为求m和n的最大公约数k,再求a ^k-b ^k,注意将结果取余p即可。进行幂运算时,使用快速幂可以实现高效计算。
(按照题目要求,这题的变量类型至少需要unsigned int,如果你不放心,像我这样用unsigned long long也行)

#include<stdio.h>
typedef unsigned long long llu;
llu gcd(llu a,llu b){       //求最大公约数if(a%b==0)return b;return gcd(b,a%b);
}
llu kuaisumi(llu x,llu n,llu mod){    //快速幂运算,注意一定要进行取余,否则结果会错llu res=1;while(n){if(n&1)res=res*x%mod;x=x*x%mod;n>>=1;}return res%mod;
}
int main(){llu a,b,m,n,p,t1,t2,ans;scanf("%llu %llu %llu %llu %llu",&a,&b,&m,&n,&p);ans=kuaisumi(a,gcd(m,n),p)-kuaisumi(b,gcd(m,n),p);printf("%llu",ans);
}

后续将会给大家介绍热身赛的6-10题,敬请期待!

沧海竞舟-热身赛II 题解(上)相关推荐

  1. 沧海竞舟热身赛I-题解

    沧海竞舟热身赛I-题解 沧海竞舟热身赛一共10题,这是本人第一次尝试写题解,写得不好的地方,还请大家指正!谢谢! 1.有理数加法 本题要求编写程序,计算两个有理数的和. 输入格式: 输入在一行中按照a ...

  2. 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

    洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...

  3. 剑指offer:面试题32 - II. 从上到下打印二叉树 II

    题目:从上到下打印二叉树 II 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3    / \ ...

  4. 【LeetCode】剑指 Offer 32 - II. 从上到下打印二叉树 II

    [LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II 文章目录 [LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II 一.层序遍历 BFS 一. ...

  5. 20200910:力扣204周周赛题解上(Java/Python/Cpp)

    力扣204周周赛题解上 题目 思路与算法 代码实现 写在最后 题目 1.1566. 重复至少 K 次且长度为 M 的模式 2.1567. 乘积为正数的最长子数组长度 思路与算法 热身题不要求算法技巧, ...

  6. 武汉工程大学第三届ACM程序设计新生赛(多校联赛)(线上赛)(热身赛) 题解

    题目链接:https://ac.nowcoder.com/acm/contest/9162#question 邀请码:acmwitedu2020 A. 最短逃生距离 当输入和输出的数据总数超过1000 ...

  7. DZY Loves Chinese/DZY Loves Chinese II 题解

    题目传送门1 \, 题目传送门2 题目大意: 给一张无向图,每次询问删掉一些边,然后问图是否连通,强制在线. 题解1 DZY Loves Chinese 和 DZY Loves Chinese II ...

  8. 【简洁+注释】剑指 Offer 32 - II. 从上到下打印二叉树 II

    立志用最少的代码做最高效的表达 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 返回其层次遍历结果 ...

  9. 剑指 Offer 32 - II. 从上到下打印二叉树 II

    2020-06-22 1.题目描述 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 2.题解 广度优先搜索,即层次遍历即可 3.代码 /*** Definition fo ...

最新文章

  1. Sublime Text3 使用
  2. MySQL—06—数据库三大范式
  3. 图像的评价指标之SSMI——结构相似性
  4. linux划分5t硬盘,关于磁盘分区(以linux系统为例)
  5. ajax 微信code获取_计算机毕业设计中微信小程序实现微信登录(Java后台)
  6. U盘中毒,word文档变成exe文件的解决办法
  7. 微软word 2019取消交叉引用
  8. 浅析DNS劫持和HTTP劫持
  9. helper java_Helper 类在Java和C++中的设计
  10. 台式机+笔记本的扩展模式+远程登录设置
  11. 2021-02-09
  12. USACO:2.2.1 Preface Numbering 序言页码
  13. [Back-To-Back LC]背对背信用证
  14. 各路由协议的协议号_2020春节档,各路高手巅峰对决?鹿死谁手
  15. 重庆专科计算机大学排名,重庆2017年专科大学排名一览表
  16. 『关于摄影的前后期』
  17. PT_二维随机变量:正态分布的可加性/一维随机变量函数与正态分布
  18. python 使用iter_content实现视频下载
  19. AIX小机不能启动故障-src:11002630代码故障的处理
  20. 机器学习:分类模型的评估精确率Presicion和召回率Recall

热门文章

  1. Android 保存图片到系统相册(三星6.0有效)
  2. 有用的连接for my NX6325
  3. IWOM mark 20111228 第92期 社会化阅读专题(转来收藏)
  4. LeetCode 815. 公交路线 / 909. 蛇梯棋(还是bfs)/ 168. Excel表列名称 / 171. Excel表列序号
  5. 求一段连续自然数的异或结果
  6. 服务器无线桥接,服务器无线桥接设置方法
  7. python生成一个含有20个随机数的列表_python随机模块22个函数详解(上)
  8. wide dynamic range - WDR - 宽动态范围 - high dynamic range - HDR - 高动态范围
  9. CentOS 7.5 的详细安装教程及初始配置
  10. Linux入门--基于VM-Centos7