聂玺航_2404020101_网络24_1 level
获赞
6
粉丝
1
关注
1
看过 TA
7
哈尔滨理工大学
2025
算法工程师
IP属地:黑龙江
暂未填写个人简介
私信
关注
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。输入描述:第一行有两个整数:L(1 输出描述:包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。示例1输入复制500 3150 300100 200470 471输出复制298备注:对于20%的数据,区域之间没有重合的部分;对于其它的数据,区域之间有重合以下是使用 C++ 解决上述问题的代码:cpp#include #include #include using namespace std;int main() {    int L, M; cin >> L; cin >> M;    // 使用布尔数组来标记树是否被移走,初始时都为false表示树都在    vector trees(L + 1, false);    for (int i = 0; i         int start, end; cin >> start; cin >> end;        for (int j = start; j             trees[j] = true;        }    }    int count = 0;    for (int i = 0; i         if (!trees[i]) {            count++;        }    }    cout     return 0;}代码解释读取输入数据:首先从标准输入读取两个整数 L 和 M,分别表示马路的长度和区域的数目。这里限定了 1 初始化表示树的状态的数组:创建一个 vector 类型的数组 trees,长度为 L + 1(因为包含数轴上 0 到 L 这 L + 1 个位置),并初始化为 false,表示初始时所有的树都在,没有被移走。标记要移走的树:通过一个循环读取每个区域的起始点和终止点坐标(start 和 end)。对于每个区域,再通过一个内层循环将该区域内(从 start 到 end,包含端点)对应的 trees 数组中的元素标记为 true,表示这些位置的树要被移走。统计剩余树的数量:遍历整个 trees 数组,通过一个循环从 0 到 L 检查每个位置。如果某个位置对应的数组元素为 false,说明该位置的树没有被移走,将计数器 count 加 1。输出结果:最后将统计得到的剩余树的数量 count 输出到标准输出。这样,代码就实现了根据输入的马路长度、区域信息,计算出移走指定区域内的树后马路上剩余树的数量的功能。不过,上述代码还可以进一步优化。因为题目中提到区域之间可能有重合部分,上述代码在标记要移走的树时,对于重合区域会进行多次重复标记操作,虽然结果正确,但效率稍低。可以先对输入的区域按照起始点坐标进行排序,然后在标记时避免重复处理重合区域
0 点赞 评论 收藏
分享
#includeusing namespace std;long long result(int n){    if(n==1) return 1;    else     {return n*result(n-1);}} long long fun(int n){      long long sum=0; while(n>0)    {      int a=n%10;        sum+=result(a);        n/=10;            }     return sum;}int main(){    int n; cin>>n;    long long b=fun(n);    cout    }以下是对这段代码的分析:1. 代码功能概述这段 C++ 代码主要实现了两个功能:一个是通过递归函数 result 计算一个整数的阶乘。另一个是通过函数 fun 计算输入整数 n 的各位数字的阶乘之和。2. 函数分析result 函数:这是一个递归函数,用于计算 n 的阶乘。当 n 等于 1 时,返回 1,这是递归的终止条件。否则,返回 n 乘以 result(n - 1),即 n! = n * (n - 1)!。fun 函数:首先初始化一个变量 sum 为 0,用于累加各位数字的阶乘。然后通过一个 while 循环,每次取出 n 的个位数字 a(通过 n % 10)。接着调用 result 函数计算 a 的阶乘并累加到 sum 中(sum += result(a))。最后将 n 缩小 10 倍(n /= 10),继续处理下一位数字,直到 n 变为 0。最后返回 sum。3. main 函数分析在 main 函数中,首先从标准输入读取一个整数 n。然后调用 fun 函数计算 n 的各位数字的阶乘之和,并将结果存储在 b 中。最后输出 b 的值。例如,如果输入 123,则会先计算 1 的阶乘、2 的阶乘和 3 的阶乘,然后将它们相加得到结果并输出。以下是代码的执行过程示例:假设输入 543:对于 fun(543):第一次循环:a = 3,sum = result(3) = 6,n = 54。第二次循环:a = 4,sum = 6 + result(4) = 6 + 24 = 30,n = 5。第三次循环:a = 5,sum = 30 + result(5) = 30 + 120 = 150,n = 0。最后输出 150。代码在功能实现上是正确的,但可以考虑以下几点改进:可以添加一些输入合法性检查,确保输入的是正整数。对于较大的数字,阶乘计算可能会导致整数溢出,可以考虑使用高精度计算库来处理这种情况。代码中result函数是否存在栈溢出的风险?代码中的 result 函数存在栈溢出的风险,原因如下:1. 递归调用机制result 函数采用了递归的方式来计算阶乘,其递归的终止条件是 n == 1。当传入一个较大的 n 值时,函数会不断地进行自身调用,每次调用都会在栈上分配一块空间来保存当前函数调用的相关信息(比如局部变量、返回地址等),而栈的空间是有限的。例如,在许多常见的系统中,栈空间通常在几兆字节左右(具体大小因操作系统、编译器等因素而不同)。如果不断地进行深层次的递归调用,栈空间最终会被耗尽,从而导致栈溢出错误,程序会异常终止。2. 实际场景举例假如传入一个非常大的 n 值,比如 100000 ,函数会依次递归调用 result(99999)、result(99998) 等等,这样大量的函数调用帧会不断压入栈中,远远超出栈所能承载的范围。3. 改进方法为了避免栈溢出风险,可以采用迭代的方式来改写 result 函数实现阶乘计算,如下:
0 点赞 评论 收藏
分享
感染新病毒后,来医院就诊的病人越来越多,每位病人包括的信息如下:姓名、病重程度和年龄。 对于来就诊的病人,医院按照如下规则对病人进行排序并进行诊治,具体规则为:病重程度高的优先诊治,同样病重程度,优先诊治年龄大的,如果年龄也相同,优先诊治名字按照字典顺序排在前面的。现在给出n个病人的信息,请编程输出排序后病人的信息。输入描述:共n + 1行,第一行,一个整数n(3≤n≤1000),表示n个病人,第2至第n + 1行,每行为一个病人的信息,包括姓名(长度小于100)、病重程度和年龄,用空格分隔。输出描述:排序后病人的信息,共n行,每行为一个病人的信息,详见输出样例。示例1输入复制5zhaoyi 9 66qianer 9 68sunsan 6 33zhousi 9 68lisan 6 32输出复制qianer 9 68zhousi 9 68zhaoyi 9 66sunsan 6 33lisan 6 32以下是使用 C++ 解决上述问题的代码:cpp#include #include #include #include using namespace std;struct Patient {    string name;    int severity;  // 病重程度    int age;};bool compare(const Patient& a, const Patient& b) { if (a.severity > b.severity) return true;    if (a.severity == b.severity) { if (a.age > b.age) return true;        if (a.age == b.age) {            return a.name         }    }    return false;}int main() {    int n; cin >> n;    vector patients(n);    for (int i = 0; i  cin >> patients[i].name >> patients[i].severity >> patients[i].age;    }    sort(patients.begin(), patients.end(), compare);    for (int i = 0; i         cout     }    return 0;}代码解释定义结构体和比较函数首先定义了 Patient 结构体,用于存储病人的姓名、病重程度和年龄这三个信息。然后定义了名为 compare 的比较函数,它接受两个 Patient 类型的常量引用作为参数,用于确定两个病人之间的先后顺序。按照题目给定的规则:如果 a 病人的病重程度大于 b 病人的病重程度,那么 a 病人优先,返回 true。如果病重程度相等,则比较年龄,若 a 病人年龄大于 b 病人年龄,a 病人优先,返回 true。如果年龄也相等,就按照字典顺序比较姓名,姓名在字典顺序中排在前面的病人优先,即返回 a.name main 函数部分在 main 函数中,先从标准输入读取表示病人数量的整数 n。接着创建一个大小为 n 的 vector 类型的容器 patients,用于存储所有病人的信息。通过循环 for (int i = 0; i 之后调用 sort 函数,传入 patients 容器的起始迭代器 patients.begin() 和结束迭代器 patients.end() 以及比较函数 compare,对 patients 容器中的病人信息按照定义好的规则进行排序。最后再通过循环 for (int i = 0; i 这样,代码就能够根据题目要求,对输入的病人信息进行正确排序并输出,实现了医院对病人诊治顺序安排的模拟功能。
0 点赞 评论 收藏
分享
设计一个People 类,该类的数据成员有姓名、年龄、身高、体重和人数,其中人数为静态数据成员,成员函数有构造函数、显示和显示人数。其中构造函数由参数姓名、年龄、身高和体重来构造对象;显示函数用于显示人的姓名、年龄、身高和体重;显示人数函数为静态成员函数,用于显示总的人数。输入描述:按姓名(长度小于100)、年龄、身高和体重(三个整数,范围10~1000)依次输入每个人的信息,已exit结束输出描述:一个整数,表示总人数。 示例1输入复制zhao 18 180 70qian 20 160 50exit输出复制2以下是使用 C++ 实现的代码:cpp#include #include using namespace std;class People {private:    string name;    int age;    int height;    int weight;    static int count;  // 静态数据成员,用于记录人数public:    // 构造函数    People(string n, int a, int h, int w) : name(n), age(a), height(h), weight(w) {        count++;    }    // 显示函数    void display() {        cout     }    // 静态成员函数,显示人数    static void displayCount() {        cout     }};// 初始化静态数据成员int People::count = 0;int main() {    string name;    int age, height, weight;    while (true) { cin >> name;        if (name == "exit") break; cin >> age >> height >> weight;        People p(name, age, height, weight);        p.display();    }    People::displayCount();    return 0;}代码解释类的定义与成员变量定义了 People 类,其中包含私有成员变量 name(姓名)、age(年龄)、height(身高)、weight(体重),以及静态私有成员变量 count(人数)。静态成员变量 count 用于统计创建的 People 类对象的数量,它在所有 People 类对象之间共享。构造函数People 类的构造函数 People(string n, int a, int h, int w) 接受姓名、年龄、身高和体重作为参数,在构造函数内部,通过初始化列表将参数赋值给相应的成员变量,并将静态成员变量 count 的值加 1,表示创建了一个新的 People 类对象。显示函数 display该函数用于输出一个人的姓名、年龄、身高和体重信息,通过 cout 按照指定格式输出成员变量的值。静态成员函数 displayCount这是一个静态成员函数,用于输出总的人数。由于它是静态函数,不依赖于具体的对象实例,所以可以直接通过类名 People::displayCount() 来调用,在函数内部输出静态成员变量 count 的值。静态数据成员初始化在类外对静态数据成员 count 进行初始化,int People::count = 0;,将其初始值设置为 0,表示初始时没有创建任何 People 类对象。main 函数部分在 main 函数中,通过一个无限循环 while (true) 来不断读取输入信息。首先读取姓名,如果姓名为 "exit",则跳出循环。然后读取年龄、身高和体重,并创建一个 People 类对象 p,传入读取到的信息进行初始化。接着调用 p.display() 函数输出该对象的信息。循环结束后,调用 People::displayCount() 函数输出总的人数,最后返回 0 结束程序。
0 点赞 评论 收藏
分享
KiKi理解了继承可以让代码重用,他现在定义一个基类shape,私有数据为坐标点x,y,  由它派生Rectangle类和Circle类,它们都有成员函数GetArea()求面积。派生类Rectangle类有数据:矩形的长和宽;派生类Circle类有数据:圆的半径。Rectangle类又派生正方形Square类,定义各类并测试。输入三组数据,分别是矩形的长和宽、圆的半径、正方形的边长,输出三组数据,分别是矩形、圆、正方形的面积。圆周率按3.14计算。输入描述:输入三行,第一行为矩形的长和宽,第二行为圆的半径,第三行为正方形的边长。输出描述:三行,分别是矩形、圆、正方形的面积。示例1输入复制7 8105输出复制5631425cpp#include using namespace std;class Shape {private:    double x;    double y;public:    Shape(double a = 0, double b = 0) : x(a), y(b) {}};class Rectangle : public Shape {private:    double length;    double width;public:    Rectangle(double l, double w, double a = 0, double b = 0) : Shape(a, b), length(l), width(w) {}    double GetArea() {        return length * width;    }};class Circle : public Shape {private:    double radius;public:    Circle(double r, double a = 0, double b = 0) : Shape(a, b), radius(r) {}    double GetArea() {        return 3.14 * radius * radius;    }};class Square : public Rectangle {public:    Square(double side, double a = 0, double b = 0) : Rectangle(side, side, a, b) {}};int main() {    double length, width; cin >> length >> width;    Rectangle rect(length, width);    cout     double radius; cin >> radius;    Circle circle(radius);    cout     double side; cin >> side;    Square square(side);    cout     return 0;}在上述代码中:首先定义了基类Shape,它包含私有数据成员x和y,用于表示坐标点,并提供了一个带有默认参数的构造函数。Rectangle类继承自Shape类,新增了私有数据成员length(长)和width(宽),其构造函数调用了基类的构造函数来初始化坐标点,并初始化自身的长和宽。GetArea函数用于计算矩形的面积。Circle类也继承自Shape类,新增了私有数据成员radius(半径),其构造函数调用基类构造函数并初始化半径。GetArea函数用于计算圆的面积。Square类继承自Rectangle类,在构造函数中通过调用Rectangle类的构造函数,将边长同时作为长和宽进行初始化,从而可以利用Rectangle类的GetArea函数计算正方形的面积。在main函数中,分别读取矩形的长和宽、圆的半径、正方形的边长,创建相应的对象并调用GetArea函数输出它们的面积。
0 点赞 评论 收藏
分享
给出一个数列 A,求出一个数列B.其中Bi   表示 数列A中 Ai 右边第一个比 Ai 大的数的下标(从1开始计数),没有找到这一个下标  Bi 就为0输出数列B输入描述:第一行1个数字 n (n ≤ 10000)第二行n个数字第 i 个数字为 Ai (0 ≤ Ai  ≤ 1000000000)输出描述:一共一行,第 i 个数和第 i+1 个数中间用空格隔开.示例1输入复制63 2 6 1 1 2输出复制3 3 0 6 6 0说明样例不用解释以下是实现该功能的 C++ 代码:cpp#include #include #include using namespace std;int main() {    int n; cin >> n;    vector A(n);    for (int i = 0; i  cin >> A[i];    }    vector B(n);    stack s; for (int i = n - 1; i >= 0; --i) {        while (!s.empty() && A[s.top()]             s.pop();        }        if (s.empty()) {            B[i] = 0;        } else {            B[i] = s.top() + 1;        }        s.push(i);    }    for (int i = 0; i         cout     }    return 0;}以下是对代码的解释:整体思路利用栈来解决这个问题。从右到左遍历数组 A,对于每个元素 A[i],将栈顶元素与 A[i] 比较,如果栈顶元素小于等于 A[i],则弹出栈顶元素,直到栈为空或者栈顶元素大于 A[i]。如果栈为空,说明 A[i] 右侧没有比它大的元素,B[i] 赋值为 0;如果栈不为空,栈顶元素的下标加 1 就是 B[i] 的值,最后将 i 压入栈中。代码实现细节首先读取输入的 n 和数组 A。创建一个与 A 大小相同的数组 B 用于存储结果,以及一个栈 s。从数组 A 的末尾开始向前遍历:进入循环 while (!s.empty() && A[s.top()] 根据栈的情况确定 B[i] 的值,如果栈为空,B[i] = 0;否则 B[i] = s.top() + 1。将当前索引 i 压入栈中,以便后续处理。最后遍历数组 B 并输出结果。
0 点赞 评论 收藏
分享
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。比如一个元素个数为4的数列,其元素为2,4,3,1,则(2,1),(4,3),(4,1),(3,1)是逆序,逆序数是4现在求给定数列的逆序数输入描述:第一行为N,表示数列的元素个数(N第二行为N个用空格隔开的整数,其值在int范围内输出描述:输出占一行,为逆序数的个数示例1输入复制42 4 3 1输出复制4备注:2020暑期集训选拔以下是使用归并排序来计算逆序数的 C++ 代码:cpp#include using namespace std;// 合并两个已排序的子数组,并计算逆序数long long merge(int arr[], int l, int m, int r) {    int n1 = m - l + 1;    int n2 = r - m;    int L[n1], R[n2];    for (int i = 0; i         L[i] = arr[l + i];    for (int j = 0; j         R[j] = arr[m + 1 + j];    long long inv_count = 0;    int i = 0, j = 0, k = l;    while (i         if (L[i]             arr[k++] = L[i++];        } else {            arr[k++] = R[j++];            // 当 R[j] 小于 L[i] 时,说明 L[i] 到 L[n1 - 1] 都大于 R[j],产生逆序数            inv_count += n1 - i;        }    }    while (i         arr[k++] = L[i++];    while (j         arr[k++] = R[j++];    return inv_count;}// 归并排序主函数,同时计算逆序数long long mergeSort(int arr[], int l, int r) {    long long inv_count = 0;    if (l         int m = l + (r - l) / 2;        inv_count += mergeSort(arr, l, m);        inv_count += mergeSort(arr, m + 1, r);        inv_count += merge(arr, l, m, r);    }    return inv_count;}int main() {    int n; cin >> n;    int arr[n];    for (int i = 0; i  cin >> arr[i];    long long result = mergeSort(arr, 0, n - 1);    cout     return 0;}以下是对代码的解释:归并排序与逆序数计算原理归并排序是一种分治算法,它将数组分成两半,分别对两半进行排序,然后再将排序好的两半合并起来。在合并的过程中,可以计算逆序数。当合并两个已排序的子数组 L 和 R 时,如果 R[j] 小于 L[i],那么说明 L[i] 到 L[n1 - 1] 都大于 R[j],此时会产生 n1 - i 个逆序数,将这些逆序数累加到 inv_count 中。代码实现细节merge 函数:首先创建两个临时数组 L 和 R,分别存储左半部分和右半部分的元素。然后通过三个循环,将原数组 arr 中的元素分别复制到 L 和 R 中,并进行合并操作。在合并过程中,按照上述原理计算逆序数。mergeSort 函数:这是归并排序的主函数,如果 l 小于 r,说明数组还可以继续分割。先计算中间索引 m,然后递归地对左半部分和右半部分调用 mergeSort 函数,并将返回的逆序数累加到 inv_count 中。最后调用 merge 函数进行合并,并将合并过程中产生的逆序数也累加到 inv_count 中。main 函数:首先读取输入的数组长度 n 和数组元素,然后调用 mergeSort 函数计算逆序数,并输出结果。
0 点赞 评论 收藏
分享
11.2的个数链接:https://ac.nowcoder.com/acm/contest/93950/M来源:牛客网请统计某个给定范围[L, R]的所有整数中,数字2出现的次数。比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数字2在该范围内一共出现了6次。输入描述:输入共1行,为两个正整数L和R,之间用一个空格隔开。输出描述:输出共1行,表示数字2出现的次数。链接:https://ac.nowcoder.com/acm/contest/93950/M来源:牛客网请统计某个给定范围[L, R]的所有整数中,数字2出现的次数。比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数字2在该范围内一共出现了6次。输入描述:输入共1行,为两个正整数L和R,之间用一个空格隔开。输出描述:输出共1行,表示数字2出现的次数。这段代码是一个C++程序,用于统计在给定范围[L, R]内所有整数中数字2出现的次数。下面是对代码的逐行解释:#include <iostream>: 这是一个预处理指令,用于引入标准输入输出库,使得程序可以使用cin进行输入和cout进行输出。using namespace std;: 这行代码告诉编译器在程序中可以直接使用std命名空间中的所有标识符,而不需要每次都加上std::前缀。int countDigitTwo(int number) {: 这是一个函数定义,声明了一个名为countDigitTwo的函数,它接受一个整数参数number,并返回一个整数。int count = 0;: 在countDigitTwo函数内部,声明了一个整型变量count并初始化为0,用于计数数字2出现的次数。while (number > 0) {: 开始一个while循环,循环条件是number大于0。if (number % 10 == 2) {: 在循环中,使用%运算符检查number的最后一位数字是否为2。count++;: 如果最后一位数字是2,count计数器加1。number /= 10;: 将number除以10,去掉最后一位数字,继续检查下一位。}: 结束while循环。return count;: countDigitTwo函数返回计数器count的值。int main() {: 程序的主函数开始。int L, R;: 声明两个整型变量L和R,用于存储用户输入的范围。cin >> L >> R;: 使用cin从标准输入读取两个整数,并将其存储在L和R中。int totalCount = 0;: 初始化一个整型变量totalCount并初始化为0,用于存储数字2在范围内出现的次数。for (int i = L; i <= R; i++) {: 开始一个for循环,循环变量i从L开始,直到R。totalCount += countDigitTwo(i);: 在每次循环中,调用countDigitTwo函数计算当前整数i中数字2出现的次数,并将其累加到totalCount中。}: 结束for循环。cout << totalCount << endl;: 使用cout输出累加得到的数字2出现的次数,并使用endl插入一个换行符。return 0;: 主函数返回0,表示程序正常结束。}: 结束main函数的定义。整体来说,这段代码通过一个辅助函数countDigitTwo来计算单个整数中数字2出现的次数,然后在主函数中遍历给定范围内的所有整数,累加每个整数中数字2出现的次数,最终输出总数
0 点赞 评论 收藏
分享
10.1的个数链接:https://ac.nowcoder.com/acm/contest/93950/J来源:牛客网给定一个十进制整数n,求其对应2进制数中1的个数。输入描述:一个整数n(0 ≤ n ≤ 1000000000)输出描述:一个整数,表示n对应2进制数中1的个数。#include using namespace std;int main() {    int n; cin >> n;     int count = 0;     for (int i = 0; i         if (n & (1             count++;         }    }    cout     return 0;}这段代码是一个C++程序,用于计算一个给定的十进制整数 n 在其二进制表示中1的个数。下面是对代码的逐行解释:#include : 这是一个预处理指令,用于引入标准输入输出库,使得程序可以使用 cin 进行输入和 cout 进行输出。using namespace std;: 这行代码告诉编译器在程序中可以直接使用 std 命名空间中的所有标识符,而不需要每次都加上 std:: 前缀。int main() {: 这是程序的主函数,程序的执行从这里开始。int n;: 声明了一个整型变量 n,用于存储用户输入的整数。cin >> n;: 使用 cin 从标准输入读取一个整数,并将其存储在变量 n 中。int count = 0;: 声明了一个整型变量 count,并初始化为0,用于计数整数 n 的二进制表示中1的个数。for (int i = 0; i if (n & (1 count++;: 如果第 i 位为1,count 计数器加1。}: 结束 if 语句。}: 结束 for 循环。cout return 0;: 主函数返回0,表示程序正常结束。}: 结束 main 函数的定义。
0 点赞 评论 收藏
分享
9.数据统计 涉及语法:vector动态数组 accumulate函数 min'max函数的应用输入一些整数,求出它们的最小值、最大值和平均值(保留3位小数)。输入保证这些数都是不超过1000的整数。输入描述:一行,若干个整数,空格分开。数据个数至少一个,不超过100100。输出描述:一行,即,最小值、最大值和平均值(保留3位小数),空格分开。#include #include  // 用于设置输出格式#include #include  // 用于min和max函数#include  // 用于accumulate函数using namespace std;int main() {    vector numbers;    int num;        // 读取所有整数直到输入结束 while (cin >> num) {        numbers.push_back(num);    }    // 检查是否有输入    if (numbers.empty()) {        cout         return 0;    }    // 计算最小值和最大值    int min_value = *min_element(numbers.begin(), numbers.end());    int max_value = *max_element(numbers.begin(), numbers.end());    // 计算平均值    double sum = accumulate(numbers.begin(), numbers.end(), 0);    double avg_value = sum / numbers.size();    // 输出最小值、最大值和平均值    cout     cout     return 0;}
0 点赞 评论 收藏
分享
8.统计素数链接:https://ac.nowcoder.com/acm/contest/93947/1025来源:牛客网小亮想知道任意指定的两个数字之间有多少个素数,请帮他编程实现以下功能:用户输入两个正整数,系统自动输出两个数之间素数的个数。输入描述:输入为一小一大两个正整数,范围为(1~2000),用空格隔开。输出描述:针对输入的两个正整数,输出它们之间(包括这两个数)素数的个数并换行。示例1输入复制1 20输出复制8#include using namespace std;// 函数用于检查一个数是否是素数bool isPrime(int num) {    if (num     if (num     if (num % 2 == 0 || num % 3 == 0) return false; // 排除能被2和3整除的数    for (int i = 5; i * i         if (num % i == 0 || num % (i + 2) == 0) return false;    }    return true;}int main() {    int a, b; cin >> a >> b; // 读取两个正整数a和b    int count = 0; // 用于计数素数的个数    for (int i = min(a, b); i         if (isPrime(i)) {            count++;        }    }    cout     return 0;}
0 点赞 评论 收藏
分享
6.鸡兔同笼链接:https://ac.nowcoder.com/acm/contest/93947/1027来源:牛客网时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld题目描述 鸡兔同笼是中国古代的数学名题之一。大约在 15001500 年前,《孙子算经》中就记载了这个有趣的问题。书中是这样叙述的:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?这四句话的意思是:有若干只鸡兔同在一个笼子里,从上面数,有 3535 个头,从下面数,有 9494 只脚。问笼中各有多少只鸡和兔?现在由你写一个程序,输入 �n 与 �m ,表示有 �n 个头、 �m 只脚,算出笼子中各有多少只鸡和兔?输入描述:输入两个整数n, m(1 ≤ n, m ≤ 1000),空格分隔,表示笼子里有多少个头、多少只脚,保证题目的数据有解。输出描述:输出两个整数,空格分隔,表示鸡的数量和兔子的数量。如果没有答案,输出“No answer!”。示例1输入复制35 94输出复制23 12#include using namespace std;int main() {    int n, m; cin >> n >> m;    int rabbit = (m - 2 * n) / 2;    int chicken = n - rabbit; if (rabbit >= 0 && chicken >= 0 && m % 2 == 0) {        cout     } else {        cout     }    return 0;}
0 点赞 评论 收藏
分享
5.数字7的个数链接:https://ac.nowcoder.com/acm/contest/93947/1023来源:牛客网wyh学长十分钟爱数字‘7’,他想知道每一个数字中有多少个数字‘7’输入描述:输入第一行一个整数T(1接下来有T组测试数据,对于每组测试数据,输入一个整数n(1输出描述:对于每组测试数据,输出对应答案示例1输入复制21234567123456#include using namespace std;int main() {    int T; cin >> T; // 读取测试数据的组数T    while (T--) {        int n; cin >> n; // 读取一个整数n        int count = 0; // 初始化数字'7'的计数器 while (n > 0) {            if (n % 10 == 7) {                count++; // 如果当前位是'7',计数器加1            }            n /= 10; // 去掉当前位,继续检查下一位        }        cout     }    return 0;}
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务