C/C++算法入门 | 简单模拟

不爱生姜不吃醋⭐️
如果本文有什么错误的话欢迎在评论区中指正
与其明天开始,不如现在行动!

文章目录

  • 前言
  • 一、害死人不偿命的(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. 首先对输入进行判断,如果是1,直接return 0
  2. 如果不是1,再进while循环判断奇偶
  3. 偶数直接除2
  4. 奇数先运算再除2
  5. 运算完的数再进行判断
  6. 每执行一次循环,计数器就加一

3.代码实现

#include 

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.思路

  1. 先确定参赛人数,由参赛人数来确定可以有几个得分
  2. 定义数组,把每个相同学校的得分相加
  3. 最终确定最高分和最高分的学校

3.代码实现

#include 
#include 

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++基础知识,多加练习熟能生巧。
本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家!!!


你可能感兴趣的:(C/C++算法,算法,c语言,c++)