不爱生姜不吃醋⭐️
如果本文有什么错误的话欢迎在评论区中指正
与其明天开始,不如现在行动!
文章目录
- 🌴前言
- 🌴一、害死人不偿命的(3n+1)猜想
- 1.题目(PAT B1001)
- 2.思路
- 3.代码实现
- 🌴二、挖掘机技术哪家强
- 1.题目(PAT B1032)
- 2.思路
- 3.代码实现
- 🌴总结
🌴前言
本文内容是关于C/C++算法入门的简单模拟题,没有涉及很复杂的算法,主要考察代码能力。模拟是一类“题目怎么说,你就怎么做”的题目,如果实现起来不太麻烦,就可以称之为“简单模拟”。这类题目不涉及算法,完全知识根据题目描述来进行代码的编写,所以考察的是代码能力。本文算法为:害死人不偿命的(3n+1)猜想和挖掘机技术哪家强。
🌴一、害死人不偿命的(3n+1)猜想
1.题目(PAT B1001)
题目描述
卡拉兹猜想:
对任何一个自然数n,如果它是偶数,那么就把它砍掉一半;如果它是奇数,那么把(3n+1)
砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1
。卡拉兹在1950年的世界数学家大会上公布了这一猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很荒唐······
在此处并非想要证明卡拉兹猜想,而是对给定的任一不超过1000的正整数n,简单数一下,需要多少步才能得到n=1?
输入格式
每个测试输入包含1个测试用例,即给出自然数n的值。
输出格式
输出从n计算到1需要的步数
输入样例
3
输出样例
5
2.思路
- 首先对输入进行判断,如果是1,直接return 0
- 如果不是1,再进while循环判断奇偶
- 偶数直接除2
- 奇数先运算再除2
- 运算完的数再进行判断
- 每执行一次循环,计数器就加一
3.代码实现
#include <cstdio>int stepNum(int a){if(a == 1){return 0;}int num = 0;while (a != 1){if(a % 2 == 0){a /= 2;}else{a = (a * 3 + 1) / 2;}num++;}return num;
}int main(){int a;scanf("%d", &a);int num = stepNum(a);printf("%d", num);return 0;
}
🌴二、挖掘机技术哪家强
1.题目(PAT B1032)
题目描述
为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。请根据比赛结果统计出技术最强的那个学校。
输入格式
在第一行给出不超过10^5的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号)及其比赛成绩(百分制),中间以空格分隔。
输出格式
在一行中给出总得分最高的学校的编号及其总分,中间以空格分隔。题目保证答案唯一,没有并列。
输入样例
6
3 65
2 80
1 100
2 70
3 40
3 0
输出样例
2 150
2.思路
- 先确定参赛人数,由参赛人数来确定可以有几个得分
- 定义数组,把每个相同学校的得分相加
- 最终确定最高分和最高分的学校
3.代码实现
#include <cstdio>
#include <cmath>const int N = pow(10,5);
int main(){int schID, score;int num;scanf("%d", &num);if(num > N){printf("参赛人数超出限制!");exit;}int gameNum[num] = {0};for (int i = 0; i < num; i++){scanf("%d%d",&schID, &score);gameNum[schID] += score; }int MAX = 0;int ID;for (int i = 0; i < num; i++){if (gameNum[i] > MAX){MAX = gameNum[i];ID = i;}}printf("%d %d", ID, MAX);return 0;
}
🌴总结
文章中代码的编写使用的都是C/C++基础知识,多加练习熟能生巧。
本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!