没有合适的资源?快使用搜索试试~ 我知道了~
首页PAT乙级编程题解:探究(3n+1)猜想与数字拼写
PAT乙级编程题解:探究(3n+1)猜想与数字拼写
需积分: 0 0 下载量 167 浏览量
更新于2024-06-13
2
收藏 2.95MB PDF 举报
PAT乙级题解包含了两道有趣的编程题目,涉及到计算机科学中的不同知识点。 1001. "害死⼈人不不偿命的(3n+1)猜想" (模拟) 这道题目挑战的是对著名数学猜想——卡拉兹猜想的理解和应用。卡拉兹猜想描述的是一个简单的数列操作过程:对于任意正整数n,如果它为偶数,则除以2;如果为奇数,则乘以3加1,然后不断重复此操作。题目要求编写程序,给定一个不超过1000的正整数n,计算经过多少步操作能得到1。通过递归或循环实现这个过程,核心逻辑是检查n是否为奇数,如果是,则执行3n+1并加1到计数器count上,接着将n除以2,直到n等于1。这道题目不仅考察编程技能,还涉及到算法效率和递归的理解。 1002. "写出这个数" (字符串处理) 第二题要求将输入的自然数n转换为字符串,并计算其各位数字之和。输入的整数范围限制在100以内。首先,读取n的值,然后使用while循环,当n不等于1时,根据奇偶性规则进行相应操作。如果是奇数,执行3n+1,然后将n除以2,同时增加计数器。最后,输出计数器的值作为步数,然后用字符串形式表示每一位数字的拼音。例如,输入的1234567890987654321会输出"yisiwu",即“一亿二十三万四千五百六十七万八千九百零一”。 这两道题目结合了基础的数值计算、循环控制和字符串处理,同时也涉及到了算法设计和数学思想的灵活运用。它们既能够帮助提升编程技巧,也能激发对数学问题的探索兴趣,是PAT乙级考试中常见的算法题型。解决这类问题时,理解题目的规则和逻辑至关重要,同时也要考虑代码的优化和效率。
资源详情
资源推荐
1015. 德才论 (25) [排序]
题描述:
宋代史学家司光在《资治通鉴》中有段著名的“德才论”:“是故才德全尽谓之圣,才德兼亡谓之
愚,德胜才谓之君,才胜德谓之。凡取之术,苟得圣,君与之,与其得,
若得愚。”
现给出批考的德才分数,请根据司光的论给出录取排名。
输格式:
输第1给出3个正整数,分别为:N(<=105),即考总数;L(>=60),为录取最低分数线,即
德分和才分均低于L的考才有资格被考虑录取;H(<100),为优先录取线——德分和才分均低
于此线的被定义为“才德全尽”,此类考按德才总分从到低排序;才分到但德分到线的类考
属于“德胜才”,也按总分排序,但排在第类考之后;德才分均低于H,但是德分低于才分的考
属于“才德兼亡”但尚有“德胜才”者,按总分排序,但排在第类考之后;其他达到最低线L的考也
按总分排序,但排在第三类考之后。
随后N,每给出位考的信息,包括:准考证号、德分、才分,其中准考证号为8位整数,德才
分为区间[0, 100]内的整数。数字间以空格分隔。
输出格式:
输出第1先给出达到最低分数线的考数M,随后M,每按照输格式输出位考的信
息,考按输中说明的规则从到低排序。当某类考中有多总分相同时,按其德分降序排;
若德分也并,则按准考证号的升序输出。
输样:
14 60 80
10000001 64 90
10000002 90 60
10000011 85 80
10000003 85 80
}
while (j < c.length() && j < d.length()) {
if (c[j] == d[j] && isalpha(c[j])) {
pos = j;
break;
}
j++;
}
string week[7] = {"MON ", "TUE ", "WED ", "THU ", "FRI ", "SAT ", "SUN "};
int m = isdigit(t[1]) ? t[1] - '0' : t[1] - 'A' + 10;
cout << week[t[0]-'A'];
printf("%02d:%02d", m, pos);
return 0;
}
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Mail: scienceyys@163.com UUID: 7f346c84-c158-36a6-931b-fa4240706f39 16
10000004 80 85
10000005 82 77
10000006 83 76
10000007 90 78
10000008 75 79
10000009 59 90
10000010 88 45
10000012 80 100
10000013 90 99
10000014 66 60
输出样:
12
10000013 90 99
10000012 80 100
10000003 85 80
10000011 85 80
10000004 80 85
10000007 90 78
10000006 83 76
10000005 82 77
10000002 90 60
10000014 66 60
10000008 75 79
10000001 64 90
分析:结构体存储。写好cmp函数~结构体数组vector v[4]中v[0]保存第类考,v[1]保存第类考
……以此类推。写好cmp函数很重要,cmp函数中,排序先按照总分排序,然后按照德分排序,最
后按照才分排序……最后输出符合条件的结果~
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct node {
int num, de, cai;
};
1
2
3
4
5
6
7
Mail: scienceyys@163.com UUID: 7f346c84-c158-36a6-931b-fa4240706f39 17
1016. 部分A+B (15) [模拟]
正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。如:给定A = 3862767,DA
= 6,则A的“6部分”PA是66,因为A中有2个6。
现给定A、DA、B、DB,请编写程序计算PA + PB。
输格式:
输在中依次给出A、DA、B、DB,中间以空格分隔,其中0 < A, B < 10^10。
输出格式:
在中输出PA + PB的值。
输样1:
3862767 6 13530293 3
int cmp(struct node a, struct node b) {
if ((a.de + a.cai) != (b.de + b.cai))
return (a.de + a.cai) > (b.de + b.cai);
else if (a.de != b.de)
return a.de > b.de;
else
return a.num < b.num;
}
int main() {
int n, low, high;
scanf("%d %d %d", &n, &low, &high);
vector<node> v[4];
node temp;
int total = n;
for (int i = 0; i < n; i++) {
scanf("%d %d %d", &temp.num, &temp.de, &temp.cai);
if (temp.de < low || temp.cai < low)
total--;
else if (temp.de >= high && temp.cai >= high)
v[0].push_back(temp);
else if (temp.de >= high && temp.cai < high)
v[1].push_back(temp);
else if (temp.de < high && temp.cai < high && temp.de >= temp.cai)
v[2].push_back(temp);
else
v[3].push_back(temp);
}
printf("%d\n", total);
for (int i = 0; i < 4; i++) {
sort(v[i].begin(), v[i].end(), cmp);
for (int j = 0; j < v[i].size(); j++)
printf("%d %d %d\n", v[i][j].num, v[i][j].de, v[i][j].cai);
}
return 0;
}
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Mail: scienceyys@163.com UUID: 7f346c84-c158-36a6-931b-fa4240706f39 18
输出样1:
399
输样2:
3862767 1 13530293 8
输出样2:
0
分析:将A和B保存在string a 和 b中,将DA和DB保存在da和db中,因为A为字符,所以对于它的每
位a[i],当da == (a[i]- ‘0’)时候表示da和a[i]相等,将相等的次数保存在cnta中,当cnta为0时,说明A中
有位数等于da,先令pa = da,然后根据cnta的次数,将cnta个da转化为pa的值(转化法为for循环从
1到cnta-1,每次pa乘以10再加上da),B同,相等的次数保存在cntb中,求出pb的值,最后输出
pa+pb的值~
1017. A除以B (20) [整数运算]
本题要求计算A/B,其中A是超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,
使得A = B * Q + R成。
输格式:
输在1中依次给出A和B,中间以1空格分隔。
输出格式:
在1中依次输出Q和R,中间以1空格分隔。
输样:
123456789050987654321 7
#include <iostream>
using namespace std;
int main() {
string a, b;
int da, db, cnta = 0, cntb = 0, pa = 0, pb = 0;
cin >> a >> da >> b >> db;
for (int i = 0; i < a.length(); i++)
if (da == (a[i] - '0')) cnta++;
for (int i = 0; i < b.length(); i++)
if (db == (b[i] - '0')) cntb++;
if (cnta != 0) pa = da;
if (cntb != 0) pb = db;
for (int i = 1; i < cnta; i++)
pa = 10 * pa + da;
for (int i = 1; i < cntb; i++)
pb = 10 * pb + db;
cout << pa + pb;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Mail: scienceyys@163.com UUID: 7f346c84-c158-36a6-931b-fa4240706f39 19
输出样:
17636684150141093474 3
分析:模拟动除法的过程,每次第位去除以B,如果得到的商是0就输出,否则就*10+下
位,直到最后的数为余数~
1018. 锤剪布 (20) [模拟]
家应该都会玩“锤剪布”的游戏:两同时给出势,胜负规则如图所示:
现给出两的交锋记录,请统计双的胜、平、负次数,并且给出双分别出么势的胜算最。
输格式:
#include <iostream>
using namespace std;
int main() {
string s;
int a, t = 0, temp = 0;
cin >> s >> a;
int len = s.length();
t = (s[0] - '0') / a;
if ((t != 0 && len > 1) || len == 1)
cout << t;
temp = (s[0] - '0') % a;
for (int i = 1; i < len; i++) {
t = (temp * 10 + s[i] - '0') / a;
cout << t;
temp = (temp * 10 + s[i] - '0') % a;
}
cout << " " << temp;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Mail: scienceyys@163.com UUID: 7f346c84-c158-36a6-931b-fa4240706f39 20
剩余126页未读,继续阅读
技术分享官
- 粉丝: 1758
- 资源: 401
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JDK 17 Linux版本压缩包解压与安装指南
- C++/Qt飞行模拟器教员控制台系统源码发布
- TensorFlow深度学习实践:CNN在MNIST数据集上的应用
- 鸿蒙驱动HCIA资料整理-培训教材与开发者指南
- 凯撒Java版SaaS OA协同办公软件v2.0特性解析
- AutoCAD二次开发中文指南下载 - C#编程深入解析
- C语言冒泡排序算法实现详解
- Pointofix截屏:轻松实现高效截图体验
- Matlab实现SVM数据分类与预测教程
- 基于JSP+SQL的网站流量统计管理系统设计与实现
- C语言实现删除字符中重复项的方法与技巧
- e-sqlcipher.dll动态链接库的作用与应用
- 浙江工业大学自考网站开发与继续教育官网模板设计
- STM32 103C8T6 OLED 显示程序实现指南
- 高效压缩技术:删除重复字符压缩包
- JSP+SQL智能交通管理系统:违章处理与交通效率提升
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功