当前位置: 首页 > news >正文

【每日一题】24.10.14 - 24.10.20

  • 10.14 直角三角形
    • 1. 题目
    • 2. 解题思路
    • 3. 代码实现(AC_Code)
  • 10.15 回文判定
    • 1. 题目
    • 2. 解题思路
    • 3. 代码实现(AC_Code)
  • 10.16 二次方程
    • 1. 题目
    • 2. 解题思路
    • 3. 代码实现(AC_Code)
  • 10.17 互质
    • 1. 题目
    • 2. 解题思路
    • 3. 代码实现(AC_Code)
  • 10.18 穿越时空之门
    • 1. 题目
    • 2. 解题思路
    • 3. 代码实现(AC_Code)
  • 10.19 元音大写
    • 1. 题目
    • 2. 解题思路
    • 3. 代码实现(AC_Code)
  • 10.20 跑步
    • 1. 题目
    • 2. 解题思路
    • 3. 代码实现(AC_Code)

在这里插入图片描述
在这里插入图片描述

上期回顾:【每日一题】24.10.7 - 24.10.13
个人主页:C_GUIQU
归属专栏:每日一题

10.14 直角三角形

1. 题目

直角三角形

在这里插入图片描述

2. 解题思路

用if判断,列出三种形式的勾股定理。

3. 代码实现(AC_Code)

  • C++
#include <iostream>using namespace std;int main()
{int a,b,c;cin >> a >> b >> c;if(a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a)cout << "YES" << endl;elsecout << "NO" << endl;return 0;
}
  • Java
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int a = scan.nextInt();int b = scan.nextInt();int c = scan.nextInt();if(a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a)System.out.println("YES");elseSystem.out.println("NO");scan.close();}
}

10.15 回文判定

1. 题目

回文判定

在这里插入图片描述

2. 解题思路

从前往后遍历的同时从后往前遍历,判断对应字符是否相等。

3. 代码实现(AC_Code)

  • C++
#include <iostream>using namespace std;int main()
{string str;cin >> str;for (int i = 0, j = str.length() - 1; i < str.length() / 2; i++, j--){if(str[i] != str[j]){cout << "N" << endl;return 0;} }cout << "Y" << endl;return 0;
}
  • Java
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);String str = scan.next();for (int i = 0, j = str.length() - 1; i < j; i++, j--) {if(str.charAt(i) != str.charAt(j)) {System.out.println("N");return ;}}System.out.println("Y");scan.close();}
}

10.16 二次方程

1. 题目

二次方程

在这里插入图片描述

2. 解题思路

具体见代码

3. 代码实现(AC_Code)

  • C++
#include <iostream>
#include <cmath>using namespace std;int main()
{int a, b, c;cin >> a >> b >> c;int delta = b * b - 4 * a * c;if(delta < 0)cout << "NO" << endl;else{// 用double相对于int更准确double x1 = (-b + sqrt(delta) / 2.0 * a);double x2 = (-b + sqrt(delta) / 2.0 * a);if(x1 == (int)x1 && x2 == (int)x2)cout << "YES" << endl;elsecout << "NO" << endl;}return 0;
}
  • Java
import java.util.Scanner;
import java.lang.Math; // 用于调用sqrt函数public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int a = scanner.nextInt();int b = scanner.nextInt();int c = scanner.nextInt(); // 读取输入的三个整数// 判别式 delta = b^2 - 4acint delta = b * b - 4 * a * c;// 检查方程是否有实数根,并且这些根是否为整数if (delta < 0) {// 如果判别式小于0,则方程没有实数根System.out.println("NO");} else {// 计算两个根double x1 = (-b + Math.sqrt(delta)) / (2.0 * a);double x2 = (-b - Math.sqrt(delta)) / (2.0 * a);// 检查根是否为整数if (x1 == Math.floor(x1) && x2 == Math.floor(x2)) {System.out.println("YES");} else {System.out.println("NO");}}scanner.close();}
}

10.17 互质

1. 题目

互质

在这里插入图片描述

2. 解题思路

用欧几里得算法找出任意两个正整数的最大公约数,判断是否为1,为1则是质数,反之则不是质数。

法1:递归
法2:迭代
在递归版本中,函数不断地调用自身,直到 b 为 0,此时返回 a,即为最大公约数。在迭代版本中,使用一个循环不断更新 a 和 b 的值,直到 b 为 0,此时 a 就是最大公约数。

【欧几里得算法】又称辗转相除法,是用来求两个正整数最大公约数的一种方法。
算法原理:
假设两个数为a和b(a>b),用a除以b得到余数r,若r为0,则b就是a和b的最大公约数;若r不为0,则用b除以r,再得到新的余数,继续这个过程,直到余数为0为止,此时的除数就是a和b的最大公约数。

在这里插入图片描述

3. 代码实现(AC_Code)

  • C++

【法1】递归

#include <iostream>using namespace std;int gcd(int a, int b)
{if(b == 0)return a;elsereturn gcd(b, a % b);
}int main()
{int count = 0;for(int i =1; i <= 2020; i++){if(gcd(i, 1018) == 1)count++;}cout << count << endl;return 0;
}

【法2】迭代

#include <iostream>using namespace std;int gcd(int a, int b)
{while(b != 0){int temp = b;b = a % b;a = temp;}return a;
}int main()
{int count = 0;for(int i =1; i <= 2020; i++){if(gcd(i, 1018) == 1)count++;}cout << count << endl;return 0;
}
  • Java

【法1】递归

public class Main {public static int gcd(int a, int b) {if(b == 0)return a;elsereturn (gcd(b,a % b));}public static void main(String[] args) {int count = 0;for(int i = 1; i <= 2020; i++) {if(gcd(i, 1018) == 1)count++;}System.out.println(count);}
}

【法2】迭代

public class Main {public static int gcd(int a, int b) {while(b != 0) {int temp = b;b = a % b;a = temp;}return a;}public static void main(String[] args) {int count = 0;for(int i = 1; i <= 2020; i++) {if(gcd(i, 1018) == 1)count++;}System.out.println(count);}
}

10.18 穿越时空之门

1. 题目

穿越时空之门

在这里插入图片描述

2. 解题思路

具体见代码。

3. 代码实现(AC_Code)

  • C++
#include <iostream>
#include <string>using namespace std;// 计算给定整数 n 的二进制表示中各位数字之和的函数
int getBinarySum(int n)
{string binary = "";// 将整数 n 转换为二进制表示并存入字符串 binary 中while(n > 0){binary = to_string(n % 2) + binary;n /= 2;}int sum = 0;// 遍历二进制字符串,计算各位数字之和for(char digit : binary){// 将字符类型的数字字符转换为实际数字值并累加到 sum 中// 例如,'1' - '0' 的结果是 1sum += digit - '0';}return sum;
}// 计算给定整数 n 的四进制表示中各位数字之和的函数
int getQuaternarySum(int n)
{string Quaternary = "";// 将整数 n 转换为四进制表示并存入字符串 Quaternary 中while(n > 0){Quaternary = to_string(n % 4) + Quaternary;n /= 4;}int sum = 0;// 遍历四进制字符串,计算各位数字之和for(char digit : Quaternary){// 将字符类型的数字字符转换为实际数字值并累加到 sum 中sum += digit - '0';}return sum;
}int main()
{int count = 0;// 遍历从 1 到 2024 的所有整数for(int i = 1; i <= 2024; i++){// 如果当前整数 i 的二进制表示各位数字之和等于四进制表示各位数字之和if(getBinarySum(i) == getQuaternarySum(i))count++;}// 输出符合穿越条件的勇者人数cout << count << endl;return 0;
}
  • Java
public class BinaryQuaternaryEquality {// 计算给定整数 n 的二进制表示中各位数字之和的方法public static int getBinarySum(int n) {// 将整数 n 转换为二进制字符串表示,例如 n = 5 时,返回 "101"String binary = Integer.toBinaryString(n);int sum = 0;// 将二进制字符串转换为字符数组进行遍历for (char digit : binary.toCharArray()) {// 将字符类型的数字字符转换为实际数字值并累加到 sum 中,// 例如,'1' - '0' 的结果是 1sum += digit - '0';}return sum;}// 计算给定整数 n 的四进制表示中各位数字之和的方法public static int getQuaternarySum(int n) {// 将整数 n 转换为四进制字符串表示,例如 n = 5 时,返回 "11"String quaternary = Integer.toString(n, 4);int sum = 0;// 将四进制字符串转换为字符数组进行遍历for (char digit : quaternary.toCharArray()) {// 将字符类型的数字字符转换为实际数字值并累加到 sum 中sum += digit - '0';}return sum;}public static void main(String[] args) {int count = 0;// 遍历从 1 到 2024 的整数for (int i = 1; i <= 2024; i++) {// 如果当前整数 i 的二进制表示各位数字之和等于四进制表示各位数字之和if (getBinarySum(i) == getQuaternarySum(i)) {count++;}}// 输出符合穿越条件的勇者人数System.out.println(count);}
}

10.19 元音大写

1. 题目

元音大写

在这里插入图片描述

2. 解题思路

遍历字符串,逐个判断是否为元音字母,转换为大写字母后输出最终的字符串。

3. 代码实现(AC_Code)

  • C++
#include <iostream>
#include <string>using namespace std;int main()
{string str;cin >> str;for (int i = 0; i < str.length(); i++){if (str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' || str[i] == 'u')str[i] = toupper(str[i]);}cout << str << endl;return 0;
}
  • Java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);String str = scan.next();// 将输入的字符串转换为字符数组char[] charArray = str.toCharArray();for (int i = 0; i < charArray.length; i++) {if (charArray[i] == 'a' || charArray[i] == 'e' || charArray[i] == 'i' || charArray[i] == 'o' || charArray[i] == 'u')// 将当前字符转换为大写形式charArray[i] = Character.toUpperCase(charArray[i]);}// 将修改后的字符数组转换回字符串并输出System.out.println(new String(charArray));scan.close();}
}

10.20 跑步

1. 题目

跑步

在这里插入图片描述

2. 解题思路

具体见代码。

3. 代码实现(AC_Code)

  • C++
#include <iostream>using namespace std;int main()
{// 定义一个数组month,用于存储每个月的天数// 这里按照非闰年的情况初始化,2月为28天int month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};// 定义变量day,用于模拟从2022年1月1日开始的天数计数,初始值为1int day = 1;// 定义变量sum,用于累加满足晨跑条件的天数,初始值为0int sum = 0;// 外层循环,遍历12个月for (int i = 0; i < 12; i++){// 内层循环,遍历每个月的天数for (int j = 1; j <= month[i]; j++){// 判断当前日期是否满足晨跑条件// 如果是周六(day % 7 == 1)或者周日(day % 7 == 2)// 或者是每月的1日、11日、21日、31日,则满足条件if (day % 7 == 1 || day % 7 == 2 || j == 1 || j == 11 || j == 21 || j == 31){// 如果满足晨跑条件,将sum加1sum++;}// 每经过一天,day的值增加1,模拟天数的递增day++;}}// 输出满足晨跑条件的总天数cout << sum << endl;return 0;
}
  • Java
public class Main {public static void main(String[] args) {int month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, day = 1, sum = 0;for(int i = 0; i < 12; i++) {for(int j = 1; j <= month[i]; j++) {if(day % 7 == 1 || day % 7 == 2 || j == 1 || j == 11 || j == 21 || j == 31)sum++;day++;}}System.out.println(sum);}
}

最后,感谢您的阅读,期待您的一键三连!
在这里插入图片描述


http://www.mrgr.cn/news/55007.html

相关文章:

  • 进程的学习
  • OpenAI GPT-o1实现方案记录与梳理
  • Android 内存优化——常见内存泄露及优化方案
  • 在win系统上做生信数据分析如何快速检查和填写正确的文件路径
  • Vue3中ref和reactive的对比
  • c语言基础程序——经典100道实例。
  • 单链表的经典算法OJ
  • 华为杯”第十三届中国研究生数学建模竞赛-C题:基于无线通信基站的室内三维定位问题
  • SpringCloud
  • process.platform 作用
  • C#基于SkiaSharp实现印章管理(11)
  • 智简魔方业务管理系统v10 好用的IDC业务管理软件
  • 嵌入式元件面试题及参考答案
  • MYSQL的SQL优化
  • PCL 点云配准 GICP算法(精配准)
  • ESP32-IDF 非易失存储 NVS
  • 《深度学习》dlib 人脸应用实例 仿射变换 换脸术
  • 时间复杂度知识点详解重点知识总结
  • 计算机网络—ACL技术和NAT转换
  • Java Exercise
  • 如何进行变基并更新拉取请求
  • 【文献及模型、制图分享】长江中游经济区“水—能源—粮食”系统与城市绿色转型适配性研究
  • 6.2 URDF集成Rviz基本流程
  • 前言——25机械考研复试专业面试问题汇总 机械复试超全流程攻略 机械复试看这一个专栏就够用了!机械复试调剂英语自我介绍口语专业面试常见问题总结 机械保研面试
  • Linux客户端/服务端安全攻防
  • 【Java SE 】继承 与 多态 详解