选择和单重循环练习(浙邮院)解题报告

选择和单重循环练习(浙邮院)-by xzj

A:输入入门(3)

题目说以0 0结束,也就是a和b同时为0的时候结束

#include <iostream>
#include <cstdio>
using namespace std;
int main() {
    int a, b;
    while (true) {
        cin >> a >> b;
        if (a == 0 && b == 0) break;
        cout << a + b << endl;
    }
    return 0;
}

B:输入入门(2)

题目说第一行一个整数n,表示有n组测试数据,那么就要循环n次

#include <iostream>
#include <cstdio>
using namespace std;
int main() {
    int n, a, b;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a >> b;
        cout << a + b << endl;
    }
    return 0;
}

C:输入入门(1)

题目说了以EOF为结束。注 :当题目说了多组测试数据而没有明确说有n组或以什么作为结束时我们默认也认为是以EOF作为结束

#include <iostream>
#include <cstdio>
using namespace std;
int main() {
    int a, b;
    while (~scanf("%d%d", &a, &b))  // 等价于scanf("%d%d", &a, &b) != EOF
        printf("%d\n", a + b);
    return 0;
}

D:输出入门

题目说两组数据间留一个换行,也就是最后一组后面不加换行,但是我们不知道什么时候是最后一组,所以可以在除第一组数据外的数据前面加一个换行。

#include <iostream>
#include <cstdio>
using namespace std;
int main() {
    int a, b;
    bool head = true;
    while (true) {
        cin >> a >> b;
        if (a == 0 && b == 0) break;
        if (head) head = false;
        else cout << endl;
        cout << a + b << endl;
    }
    return 0;
}

E:C语言实验题――整除

同时被3和5整除,所以我们要用逻辑与运算符

#include <iostream>
#include <cstdio>
using namespace std;
int main() {
    int n;
    cin >> n;
    if (n % 3 == 0 && n % 5 == 0) cout << "Yes" << endl;
    else cout << "No" << endl;
    return 0;
}

当然,想一想也知道,3和5的公倍数就是15的倍数

#include <iostream>
#include <cstdio>
using namespace std;
int main() {
    int n;
    cin >> n;
    if (n % 15 == 0) cout << "Yes" << endl;
    else cout << "No" << endl;
    return 0;
}

F:C语言实验题――求平均值

遇到小数的题建议使用double,而且可以用int存储的数据不建议使用double存。

#include <iostream>
#include <cstdio>
using namespace std;
int main() {
    int n;
    double m, sum = 0;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%lf", &m);
        sum += m;
    }
    printf("%.2f\n", sum / n);
    return 0;
}

G:C语言实验题――圆周率

既然求的是PI,而给出的公式是PI/4。那么我们可以将等式的两边都乘4

#include <iostream>
#include <cstdio>
using namespace std;
int main() {
    double p = 0;
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        p += 4.0 / (4 * i - 3);
        p -= 4.0 / (4 * i - 1);
    }
    printf("%.5f\n", p);
    return 0;
}

H:成绩评估

标准的switch题目,对10位进行判断就好,当然也可以使用if-else来解决

#include <iostream>
#include <cstdio>
using namespace std;
int main() {
    int n;
    while (~scanf("%d", &n)) {
        switch(n / 10) {
            case 10 :
            case 9 : cout << "A" << endl; break;
            case 8 : cout << "B" << endl; break;
            case 7 : cout << "C" << endl; break;
            case 6 : cout << "D" << endl; break;
            case 5 :
            case 4 :
            case 3 :
            case 2 :
            case 1 :
            case 0 : cout << "E" << endl; break;
            default : cout << "Score is error!" << endl;
        }
    }
    return 0;
}

I:亲和数

只许求出a和b的真约数和就可以了,其实求n的真约数只需循环sqrt(n)次,我这里循环了n次。对于这题应该可以解决。

#include <iostream>
#include <cstdio>
using namespace std;
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        int a, b, sa = 0, sb = 0;
        cin >> a >> b;
        for (int i = 1; i < a; i++) {
            if (a % i == 0)
                sa += i;
        }
        for (int i = 1; i < b; i++) {
            if (b % i == 0)
                sb += i;
        }
        if (a == sb && b == sa) puts("YES");
        else puts("NO");
    }
    return 0;
}

J:求绝对值最大值

要求绝对值最大的数,那么就在比较的时候在两边加上abs函数

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main() {
    int n, m, k = 0;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> m;
        if (abs(m) > abs(k)) {
            k = m;
        }
    }
    cout << k << endl;
    return 0;
}

K:C语言实验题――最小公倍数和最大公约数

最大公约数和最小公倍数,求出一个就可以推出另一个,最大公约数比较好求,所以来求最大公约数

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main() {
    int a, b, gcd;
    cin >> a >> b;
    for (gcd = a < b ? a : b; gcd >= 1; gcd --) {
        if (a % gcd == 0 && b % gcd == 0)
            break;
    }
    cout << a * b / gcd << " " << gcd << endl;
    return 0;
}

可以了解一下辗转相除法和algorithm头文件下的__gcd函数

L:C语言实验题――分数序列

和斐波那契数列相似。

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main() {
    int a = 2, b = 1, c, n;
    double sum = 0;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        sum += 1.0 * a / b;
        c = a + b;
        b = a;
        a = c;
    }
    printf("%.6f\n", sum);
    return 0;
}


为解题报告打分
暂时不评分

★★
★★★
★★★★
★★★★★
发表您的评论(若贴AC代码或发表禁止言论等违禁行为将被删除并扣除积分)

|返回 |   | 转到页头|
Copyright @ 2008-2024(浙ICP备2022001332号), TZOJ. All Rights Reserved.