上节课作业部分(点击跳转)
单元复习(二)
[【字符串】作者名]
【思路分析】 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