首页 > 编程语言 >C++U2-第11课-单元复习(二)

C++U2-第11课-单元复习(二)

时间:2023-11-05 20:34:50浏览次数:38  
标签:11 判断 false int C++ U2 素数 true 回文

上节课作业部分(点击跳转)

 单元复习(二)

[【字符串】作者名]

【思路分析】
1、定义字符串s

2、 使用cin>>s,输入字符串

3、输出字符串的第一个字符s[0],因为第一个作者名前面没有-

4、遍历字符串,遇到 - 的位置,输出此位置的下一个位置

【参考代码】
#include<iostream>
#include<string>
using namespace std;
int main()
{
    //1、定义字符串 
    string s;
    //2、输入字符串 
    cin >> s;
    //3、输出第一个作者名的首字母 
    cout << s[0];
    //4、遍历字符串,i=0已经处理了,从i=1开始 
    for(int i = 1; i < s.size(); i++)
    {
        if(s[i] == '-')   //遇到 - ,输出下一个位置 
            cout << s[i + 1];   
    }
    return 0;
}
点击展开代码

 [【双重循环】神奇数字]

 

【思路分析】
1、输入整数 n

2、预处理 1~100 中,符合条件的 s 
2
​
 ,存入 idx 数组中

​ 1.个位数是一定是符合题意的

​ 2.十位数去判断个位和十位是否相等

3、从小到大遍历符合条件的 s 
2
​
 ,根据式子求出 s1

​ 1.要注意 s 
1
​
  的范围,有可能超过 int

4、判断 s 
1
​
  是否符合题意

​ 1.数组记录 s 
1
​
  的每一位数字出现的次数

​ 2.细节点:标记,清空数组

【参考代码】
#include<iostream>
using namespace std;
int idx[100],cnt;
bool vis;
int main()
{
    //1、输入整数n 
    long long n;
    cin >> n;
    //2、预处理1~100中,符合条件的s2,存入idx数组 
    for(int i = 1; i < 99; i++)
    {
        //2.1、个位数符合题意 
        if(i >= 1 && i <= 9)               
            idx[++cnt] = i;
        else
        {
            //2.2、十位数,判断个位和十位是否相等 
            int ge = i % 10 , shi = i / 10;       
            if(ge != shi)
                idx[++cnt] = i;
        }
    }
    //3、根据s1/s2=n,求出符合条件的s1
    for(int i = 1; i <= cnt; i++)    //从小到大枚举s2 
    {
        //3.1、s1有可能超过int的范围 
        long long  s1 = (long long)idx[i] * n , k;   
        //4、判断s1是否符合条件:每一位都不相同
        k = s1;  //s1的替身
        //4.1、判断每一位数字出现的次数
        int book[15];
        for(int i = 0; i < 10; i++)   //清空 
            book[i] = 0;
        while(k)
        {
            book[k % 10]++;
            k /= 10;
        } 
        bool flag=false;   //标记 
        for(int i = 0; i <= 9; i++)
        {
            if(book[i] > 1)  //出现的次数大于1 
            {
                flag = true;
                break;
            }
        }
        if(flag == false)   //符合条件 
        {
            vis = 1;
            cout << s1 << "/" << idx[i] << "=" << n << endl;  //控制格式输出 
        }     
    } 
    if(vis == 0)      //没有一个符合条件 
        cout << "No";    
    return 0;
}
点击展开代码

 

位运算

[【数学思维】完全平方数]

 

【题意分析】
多组样例,每一组样例求出这个区间内完全平方数的个数。每组样例占一行。

【思路分析】
1、定义变量t、a、b,注意数据范围

2、利用循环结构,实现多组输入

3、输出答案

​ 1、[1,n] 中完全平方数的最大值为 sqrt(n) * sqrt(n)。sqrt(n) * sqrt(n)<=n,若超过 sqrt(n),则两数相乘超过 n

​ 2、[1,n] 中完全平方数的个数为 sqrt(n)。sqrt(n) * sqrt(n)为完全平方数,则 sqrt(n-1) * sqrt(n-1)、sqrt(n-2) * sqrt(n-2)......sqrt(1) * sqrt(1) 也为完全平方数。

​ 3、[a,b] 的完全平方数的个数为 sqrt(b)-sqrt(a-1)

【参考代码】
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    //1、定义变量t、a、b,注意数据范围
    int t;
    long long a , b;
    cin >> t;
    //2、利用循环结构,实现多组输入
    while(t--)
    {
        cin >> a >> b;
        //3、输出答案
        cout << (int)(sqrt(b) - sqrt(a-1)) <<endl;
    }
    return 0;
}
点击展开代码

 

 

 

上节课作业部分:

1、闰年

【题意分析】
对于输入的年份判断当前年份是否是闰年,根据每4年一闰,每100年不闰,每400年又要闰规则

【思路分析】
定义一个y表示我们当前输入的年份

用函数判断我们当前是否为闰年,如果 y 是闰年就返回 true;如果 y 是平年就返回 false

根据闰年规则4年一闰,每100年不闰,每400年又要闰经行判断,然后当前的数符合4或400的倍数不是100的倍数

如果 is_leap 函数返回 true,则说明是闰年

如果 is_leap 函数返回 false,则说明是平年

【参考代码】
/*
    定义函数判断当前的年份是否为闰年,按照4年一闰百年不闰,四百年一闰的规则,是闰年输出yes不是输出no
*/

#include <iostream>
using namespace std;

bool is_leap(int y) {
    //根据闰年规则4年一闰,每100年不闰,每400年又要闰经行判断,然后当前的数符合4或400的倍数不是100的倍数 
    if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0)) {
        return true;
    }
    else {
        return false;
    }
}
int main() {
    //定义一个y表示我们当前输入的年份 
    int y;
    cin >> y;
    //用函数判断我们当前是否为闰年,如果 y 是闰年就返回 true;如果 y 是平年就返回 false 
    if (is_leap(y) == true){
        // 如果 is_leap 函数返回 true,则说明是闰年
        cout << "YES";   
    }
    else{
        // 如果 is_leap 函数返回 false,则说明是平年
        cout << "NO";  
    }
    return 0;
}
点击展开代码

 

 2、回文数判定

【题意分析】
我们需要对一个数判断是否为回文数

【思路分析】
先将一个数倒过来然后将倒过来的数和原数比较,相同就为回文数

定义函数判断当前的数是否是回文数

定义一个t用来储存n的颠倒过来的数

每次t*10,然后取出m的尾数

倒过来的数 t,t == n,就是回文数

定义n并且输入n

用函数判断n是不是回文数

【参考代码】
/*
先将一个数倒过来然后将倒过来的数和原数比较,相同就为回文数
*/
#include <iostream>
using namespace std;
//定义函数判断当前的数是否是回文数
bool is_pal(int n) {
    //定义一个t用来储存n的颠倒过来的数
    int m = n, t = 0;
    while (m > 0) {
        //每次t*10,然后取出m的尾数
        t = t * 10 + m % 10;
        m /= 10;
    }
    // 倒过来的数 t,t == n,就是回文数
    if (t == n) {
        return true;
    }
    else {
        return false;
    }
}

int main() {
    //定义n并且输入n
    int n;
    cin >> n;
    //用函数判断n是不是回文数
    if (is_pal(n)) {
        cout << "Yes" << endl;
    }
    else {
        cout << "No" << endl;
    }
    return 0;
}
点击展开代码

 

3、三角形面积

【题意分析】
求出p,然后将我们的数都带入到海伦公式计算得出答案

【思路分析】
将abc带入海润公式求解得到三角形面积,对于答案保留小数

定义a,b,c然后输入

将a,b,c带入自定义函数求结果

先求出p的值,然后带入海伦公式计算

输出求的的三角形面积,保留两位小数

【参考代码】
/*
    将abc带入海润公式求解得到三角形面积,对于答案保留小数
*/
#include <iostream>
#include <cmath>
using namespace std;
double js(int a,int b,int c){
    //先求出p的值,然后带入海伦公式计算
    double p = (a + b + c) / 2;
    double s = sqrt(p * (p - a) * (p - b) * (p - c));
    return s;
}
int main() {
    //定义a,b,c然后输入
    double a, b, c;
    cin >> a >> b >> c;
    //将a,b,c带入自定义函数求结果
    s=js(a,b,c);
    //输出求的的三角形面积,保留两位小数
    printf("%.2f", s);
    return 0;
}
点击展开代码

 

4、回文素数

【题目分析】
【题意分析】
对于输入的数需要判断当前这个数是否为素数,这个数又同时需要判断是否为回文数,同时满足我们输出YES

【思路分析】
将当前的数倒过来和原来的数比较判断是否相同,相同为回文数

for循环判断当前的数是否有除了1和自己本身的因子,有的话,当前的数不是素数

【参考代码】
#include <iostream>
#include <cmath>
using namespace std;


bool is_pal(int n) {// 实现 is_pal 函数,如果 n 是回文数,则返回 true,否则返回 false 
    int t = n, m = 0;
    while (t > 0) {
        m = m * 10 + t % 10;
        t /= 10;
    }
    if (n == m) {
        return true;
    }
    else {
        return false;
    }

}


bool is_prime(int n) {// 实现 is_prime 函数,如果 n 是素数,则返回 true,否则返回 false
    if (n == 1)return false;
    for (int i = 2; i <= sqrt(n); i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}
int main() {
    int n;
    cin >> n;
    // 如果 is_pal(n) 返回 true,并且 is_prime(n) 返回 true,则说明 n 是回文素数 
    if (is_pal(n) && is_prime(n)) {
        cout << "Yes";
    }
    else {  // 否则,n 不是回文素数 
        cout << "No";
    }
    return 0;
}
点击展开代码

 

5、素数对

【题目分析】
【题意分析】
求出我们n以内有多少个素数是相差2的,那些数是素数对

【思路分析】
for循环判断一个数除了1和本身没有其他因子,如果有那么就不是素数,然后判断两个相差为2的数是否都为素数

定义一个bool变量,如果b为true,则表示找到了,为false则表示没找到。

因为2与任何一个素数的差都不为2,所以可以直接从3开始枚举。

判断两个数是否为素数,是素数的话标记我们有素数对

函数判断是否为素数,for循环判断一个数除了1和本身没有其他因子

最后判断标识符是否为false,为false则没有遇到素数对

【参考代码】
/*
for循环判断一个数除了1和本身没有其他因子,如果有那么就不是素数,然后判断两个相差为2的数是否都为素数
*/
#include <iostream>
#include <cmath> 
using namespace std;

int n;
//定义一个bool变量,如果b为true,则表示找到了,为false则表示没找到。
bool b;

//函数判断是否为素数,for循环判断一个数除了1和本身没有其他因子
bool is_prime(int n) {
    for (int i = 2; i < n; i++) {  
        if (n % i == 0) {
            return false;  
        }
    }
    return true;
}

int main() {
    cin >> n;
    //因为2与任何一个素数的差都不为2,所以可以直接从3开始枚举。 
    for (int i = 3; i <= n - 2; i++) {
        //判断两个数是否为素数,是素数的话标记我们有素数对
        if (is_prime(i) && is_prime(i + 2)) {
            b = true;
            cout << i << " " << i + 2 << endl;
        }
    }
    //最后判断标识符是否为false,为false则没有遇到素数对
    if (b == false) {
        cout << "empty";
    }
    return 0;
}
点击展开代码

 

标签:11,判断,false,int,C++,U2,素数,true,回文
From: https://www.cnblogs.com/jayxuan/p/17811090.html

相关文章

  • 110115
    一场比赛中共有 n 支队伍,按从 0 到  n-1 编号。给你一个下标从 0 开始、大小为 n*n 的二维布尔矩阵 grid 。对于满足 0<=i,j<=n-1 且 i!=j 的所有 i,j :如果 grid[i][j]==1,那么 i 队比 j 队 强 ;否则,j 队比 i 队 强 。在这场比赛......
  • 11、SpringMVC之文件下载和上传
    创建名为spring_mvc_file的新module,过程参考9.1节和9.5节11.1、文件下载11.1.1、创建图片目录并放置图片11.1.2、页面请求示例<ath:href="@{/test/down}">下载图片</a>11.1.3、控制器方法示例packageonline.liaojy.controller;importorg.springframework.http.Ht......
  • 2023.11
    换种方式来写。XXIIOpenCup,Korea:A.AutomaticSprayer2这个构造场上过的不少,但是真实难度并不低。考虑如果我们能解出每一行,每一列的和\(r/c\)。那么根据一定有解这个事实,我们一定能构造出一个合法的矩阵,考虑以下的网络流模型:建立二分图,左行右列。然后\(s\)连向所有行......
  • 【C++】关于全局变量和局部变量问题
    1#include<iostream>2usingnamespacestd;34voidfunc(void);56staticintcount=10;78intmain(){9while(count--){10func();11}1213return0;14}1516voidfunc(void){17staticinti=5;......
  • 文心一言 VS 讯飞星火 VS chatgpt (128)-- 算法导论11.1 3题
    三、用go语言,试说明如何实现一个直接寻址表,表中各元素的关键字不必都不相同,且各元素可以有卫星数据。所有三种字典操作(INSERT、DELETE和SEARCH)的运行时间应为O(1)(不要忘记DELETE要处理的是被删除对象的指针变量,而不是关键字。)文心一言,代码正常运行:在Go语言中,我们可以使......
  • 2023.11.5——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.软考知识明日计划:学习......
  • 2023年11月第一周题解-------数组
    1.问题A:LY学长的随机数解题思路第一种思路是先去重后排序第二种思路是先排序再去重解题方法暴力遍历#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<time.h>#defineN10voidquickSort......
  • 2023年11月第一周第二次总结
    1.动态规划在我看来动态规划就是用一种缓存机制来保存之前求解的答案,如果要再次用到已经求解过的答案就直接把缓存里面的答案给他而不必再次求解,也就是用空间换取时间那么要解决动态规划问题,最好按照以下步骤来求解用暴力递归来求解问题能用记忆化搜索就先用记忆化搜索......
  • 11月3日前端需要学习的知识、自闭合标签、meta标签、div标签
    目录前端需要学习的知识生成的网页类型静态网页动态网页网页的架构c/s架构b/s架构浏览器的特别用法第一种结合python来使用第二种将文件拖入浏览器里面(这就符合渲染了)重点HTML首先!DOCTYPEhtml其次就是html到/html还有就是head到/head的内部最后就是body到/body总结其它的标签......
  • CF1196B
    题意:n个数,分割成k个部分,使得每份和都为奇数做法:一个序列的和的奇偶性和偶数没关系,所以只需要考虑奇数的个数现在考虑两个问题:1.如果奇数的个数小于最终要求的k,那么就无法完成分类(即是如果一个数一块也不行)2.如果奇数的个数,记为cnt,cnt的奇偶性和k的奇偶性不同,例如cnt为3,k为2......