理论CPP-2022秋-个人解析

有较为详细的解析,如有错误请直接联系我。

左侧目录可点击到达对应题目

点击标题可直接到达PTA

1.英文字母 - C/C++变量及简单数据类型

ASCII码中65对应A,97对应a,输入字符时,减去64即为大写字母的位数,反之+64即可

较为简单的判断

#include <bits/stdc++.h>
using namespace std;
int main(){
    char a;
    cin>>a;
    cout<<(int(a)-64)<<endl;
    int N;
    cin>>N;
    cout<<char(N+64);

}

2.温度单位转换 - C/C++ 语法基础

直接带入公式即可,注意第6行要写成5.0,要有一个高精度去自动转化

较为简单

#include <bits/stdc++.h>
using namespace std;
int main(){
    int f;
    cin>>f;
    printf("%.1f",5.0/9*(f-32));
}

3.绩点计算 - C/C++ 语法基础

计算绩点首先先要收集数据,这一步较为简单

由于是固定的5组,每组两个初始数据,成绩和对应学分,但最后绩点计算的为各个绩点的加权平均

所以每组定义为三个数据,第一为分数,第二为学分,第三位为计算出来的绩点。

在计算绩点时,依据题意去添加一个判断,大于九十直接按4计算,

小于90按 课程绩点 = 4.0 * 分数/90 计算

if(i[0]<90){
    i[2]=4.0*i[0]/90;
} else{
    i[2] = 4;
}

接着循环累加各科目绩点加权平均即可

#include <bits/stdc++.h>
using namespace std;
int main(){
    double num[5][3];
    double sum = 0;
    double sum1 = 0;
    for (auto & i : num) {
        cin >> i[0];
        cin >> i[1];
        if(i[0]<90){
            i[2]=4.0*i[0]/90;
        } else{
            i[2] = 4;
        }
    }
    for (auto & i : num) {
        sum+=i[2]*i[1];
        sum1+=i[1];
    }
    sum= sum/sum1;
    printf("GPA:%.2f",sum);
}

4.菲姐游泳 -C/C++语法基础

这个似乎只能拆成分钟去计算,直接计算时钟减时钟,分钟减分钟,再判断的话,会有一点问题,暂时没想到好的解决办法。。。

#include <bits/stdc++.h>
using namespace std;
int main() {
    int a = 0, b = 0,c =0, d = 0;
    cin >> a >>b>>c>>d;
    int delta = (c*60 + d) - (a*60 + b);
    int m = delta % 60;
    int h = (delta - m) / 60;
    printf("%d:%d", h, m);
    return 0;
}

5.求2个整数,3个整数的最大值,用同名函数实现

这个其实简单,不用同名函数直接判断也可以过测试,按照题意去写同名函数也不难

应该可以看懂代码,相当于方法的重(chong)载

#include <bits/stdc++.h>
using namespace std;
int max(int a,int b){
    if(a>b){
        cout<<a<<endl;
    }else{
        cout<<b<<endl;
    }
}
int max(int a,int b,int c){
    if(a>b){
        if(a>c){
            cout<<a;
        }else{
            cout<<c;
        }
    }else{
        if(b>c){
            cout<<b;
        }else{
            cout<<c;
        }
    }
}
int main(){
    int a,b,c;
    cin>>a>>b>>c;
    max(a,b);
    max(a,b,c);
}

6.函数重载(数据类型不同)

额,就是排序,直接用冒泡就可以。

#include <bits/stdc++.h>
using namespace std;
void sort(int n,int num[]){
    for (int end = n-1; end>=0;end--) {
        for (int j = 1; j <= end; ++j) {
            if(num[j-1]>num[j]){
                int temp = num[j-1];
                num[j-1]=num[j];
                num[j] = temp;
            }
        }
    }
    for (int i = 0; i < n; ++i) {
        cout<<num[i]<<" ";
    }
    cout<<endl;
}
void sort(int n,double num[]){
    for (int end = n-1; end>=0;end--) {
        for (int j = 1; j <= end; ++j) {
            if(num[j-1]>num[j]){
                double temp = num[j-1];
                num[j-1]=num[j];
                num[j] = temp;
            }
        }
    }
    for (int i = 0; i < n; ++i) {
        cout<<num[i]<<" ";
    }
}
int main(){
    int n;
    cin>>n;
    int num[n];
    for (int i = 0; i < n; ++i) {
        cin>>num[i];
    }
    double nummber[n];
    for (int i = 0; i < n; ++i) {
        cin>>nummber[i];
    }
    sort(n,num);
    sort(n,nummber);
}

7.判断素数

判断素数,这个判断假如完全暴力循环判断时,遇到超大数时会超时。

for (int i = 2; i < num; ++i) {
    if(num%i==0){
        count++;
        return 1;
        break;
    }
}

如何缩小范围呢?

有这样一个组合的乘积不是素数

3 * 3 = 9

4 * 4 = 16

5 * 5 = 25

……

46340 * 46340 = 2,147,395,600

任何一个非素数数都至少有一个小于等于该数开平方根的因数

所以将循环范围缩小到该数的开平方,就可以大大缩小循环次数

所以正解如下

#include <bits/stdc++.h>
using namespace std;
int PD(int num){
    int count = 0;
    if(num==1){
        return 1;
    }else{
        for (int i = 2; i < sqrt(num); ++i) {
            if(num%i==0){
                count++;
                return 1;
                break;
            }
        }
        if(count==0){
            return 0;
        }
    }
}
int main(){
    int n;
    cin>>n;
    int num[n];
    for (int i = 0; i < n; ++i) {
        cin >> num[i];
    }
    for (int j = 0; j < n; ++j) {
        if(PD(num[j])==1){
            cout<<"No"<<endl;
        }else{
            cout<<"Yes"<<endl;
        }
    }
    return 0;
}

8.找完数

1.输入边界m n

2.在m n 之内进行循环

3.定义累加变量sum去累加各个因子

4.累加下的和和原数相同的话,进行输出

5.定义flag变量去记录是否有完数,没有的话最后输出“None”

#include <iostream>
using namespace std;
int main() {
    int m;
    int n;
    int flag = 0;
    cin >> m >> n;//输入边界,你可以自己换成scanf
    for (int i = m; i <= n; ++i) {//循环,i为每一个在边界内的数
        int sum = 0;//累加变量初始为0
        for (int j = 1; j < i; ++j) {//与素数不同,这里要从1开始判断因子
            if (i%j==0){
                sum +=j;//定义累加变量sum去累加各个因子
            }
        }
        if(sum == i){//累加下的和和原数相同的话,进行输出
            int p = 0;
            flag++;
            cout<<i<<" = ";
            for (int j = 1; j < i; ++j) {
                if (i%j==0){
                    p +=j;
                    if(p!=i){
                        cout<<j<<" + ";
                    }else{
                        cout<<j;
                    }
                }
            }
            cout<<endl;
        }
    }
    if(flag == 0){//定义flag变量去记录是否有完数,没有的话最后输出“None”
        cout<<"None";
    }
    return 0;
}
请勿直接copy,小心查重

评论

  1. devil
    2 年前
    2022-12-14 21:17:58

    大佬嘎嘎牛,嘎嘎厉害

  2. 山鬼三念
    2 年前
    2022-12-12 21:17:31

    A wesome!!!

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇