信息学奥赛一本通 1.4:循环结构的程序设计(2)

​第一部分 C++语言

第四章 循环结构的程序设计

第二节 while语句

1085 球弹跳高度的计算

#include <cstdio>
using namespace std;

int main(){
    double h;
    scanf("%lf", &h);
    double ttl = h;

    int n = 1;
    while(n < 10){
        n++;
        h /= 2;
        ttl += h*2;
    }

    printf("%g\n%g\n", ttl, h/2);

    return 0;
}
1086 角谷猜想
#include <cstdio>
using namespace std;

int main() {
    int n;
    scanf("%d", &n);

    while (n != 1) {
        if ( n%2 == 0) {
            printf("%d/2=%d\n", n, n/2);
            n /= 2;
        }
        else{
            printf("%d*3+1=%d\n", n, n*3+1);
            n = n * 3 + 1;
        }
    }

    printf("End\n");

    return 0;
}
1087 级数求和
#include <cstdio>
using namespace std;

int main() {
    int k, n = 0;
    double sum = 0;
    scanf("%d", &k);

    while (sum <= k) {
        n++;
        sum += 1.0 / n;
    }

    printf("%d\n", n);

    return 0;
}
1088 分离整数的各个数
#include <cstdio>
using namespace std;

int main() {
    int n;
    scanf("%d", &n);

    while (n) {
        printf("%d ", n%10);
        n /= 10;
    }

    return 0;
}
1089 数字反转
#include <cstdio>
using namespace std;

int main() {
    int n;
    scanf("%d", &n);

    if (n < 0) {
        printf("-");
        n *= -1;
    }

    while (n % 10 == 0) {
        n /= 10;
    }

    while (n) {
        printf("%d", n%10);
        n /= 10;
    }

    return 0;
}
1090 含k个3的数
#include <cstdio>
using namespace std;

int main() {
    int m, k, cnt = 0;
    scanf("%d%d", &m, &k);

    int t = m;
    while (t) {
        if (t%10 == 3) cnt++;
        t /= 10;
    }

    if (cnt == k && m%19 == 0) {
        printf("YES\n");
    }
    else {
        printf("NO\n");
    }

    return 0;
}

第四节 循环嵌套

1091 求阶乘的和

#include <cstdio>
using namespace std;

int main() {
    int n, t = 1, s = 0;

    scanf("%d", &n);

    for (int i = 1; i <= n; i++) {
        t = 1;
        for (int j = 1; j <= i; j++) {
            t *= j;
        }
        s += t;
    }

    printf("%d\n", s);

    return 0;
}
1092 求出e的值
#include <cstdio>
using namespace std;

int main() {
    int n;
    long long t = 1;
    double s = 1;

    scanf("%d", &n);

    for (int i = 1; i <= n; i++) {
        t = 1;
        for (int j = 1; j <= i; j++) {
            t *= j;
        }
        s += 1.0 / t;
    }

    printf("%.10lf\n", s);

    return 0;
}
1093 计算多项式的值
#include <cstdio>
using namespace std;

int main() {
    int n;
    double x = 1, t = 1, s = 1;

    scanf("%lf%d", &x, &n);

    for (int i = 1; i <= n; i++) {
        t = 1;
        for (int j = 1; j <= i; j++) {
            t *= x;
        }
        s += t;
    }

    printf("%.2lf\n", s);

    return 0;
}
1094 与7无关的数
#include <cstdio>
using namespace std;

int main() {
    int n, sum = 0;
    scanf("%d", &n);

    for (int i = 1; i <= n; i++) {
        if (i%10 != 7 && i/10 != 7 && i%7 !=0) {
            sum += i * i;
        }
    }

    printf("%d\n", sum);

    return 0;
}
1095 数1的个数
#include <cstdio>
using namespace std;

int main() {
    int n, cnt = 0;
    scanf("%d", &n);

    for (int i = 1; i <= n; i++) {
        int t = i;
        while (t) {
            if (t%10 == 1) cnt++;
            t /= 10;
        }
    }

    printf("%d\n", cnt);

    return 0;
}
1096 数字统计
#include <cstdio>
using namespace std;

int main() {
    int l, r, cnt = 0;
    scanf("%d%d", &l, &r);

    for (int i = l; i <= r; i++) {
        int t = i;
        while (t) {
            if (t%10 == 2) cnt++;
            t /= 10;
        }
    }

    printf("%d\n", cnt);

    return 0;
}
1097 画矩形
#include <cstdio>
using namespace std;

int main() {
    int h, w, flag;
    char ch;
    scanf("%d %d %c %d", &h, &w, &ch, &flag);

    for (int j = 0; j < w; j++) printf("%c", ch);
    printf("\n");

    for (int i = 1; i < h - 1; i++) {
        printf("%c", ch);

        for (int j = 1; j < w - 1; j++) {
            if (flag) printf("%c", ch);
            else printf(" ");
        }

        printf("%c\n", ch);
    }

    for (int j = 0; j < w; j++) printf("%c", ch);

    return 0;
}
1098 质因数分解
#include <cstdio>
using namespace std;

int main() {
    int n;
    scanf("%d", &n);

    for (int i = 2; i <= n/i; i++) {
        if (n % i == 0) {
            printf("%d", n / i);
            break;
        }
    }

    return 0;
}
1099 第n小的质数
#include <cstdio>
using namespace std;

int main() {
    int n;
    scanf("%d", &n);

    int i, j;
    for (i = 2, j = 0; j < n; i++) {
        bool flag = true;
        for (int k = 2; k <= i/k; k++) {
            if (i%k == 0) {
                flag = false;
                break;
            }
        }
        if (flag) j++;
    }

    printf("%d", i - 1);

    return 0;
}
1100 金币
#include <cstdio>
using namespace std;

int main() {
    int n, sum=0, day=0;
    scanf("%d", &n);

    for (int i = 1;  ; i++) {
        for (int j = 1; j <= i; j++) {
            day++;
            if (day > n) {
                printf("%d\n", sum);
                return 0;
            }
            sum += i;
        }
    }

    return 0;
}
1101 不定方程求解
#include <cstdio>
using namespace std;

int main() {
    int a, b, c, cnt = 0;
    scanf("%d%d%d", &a, &b, &c);

    for (int x = 0; x <= c; x++) {
        for (int y = 0; y <= c; y++) {
            if (a*x + b*y == c) cnt++;
        }
    }

    printf("%d\n", cnt);

    return 0;
}

如果您的孩子四年级及以上,对计算机编程感兴趣,且文化课学有余力,欢迎联系客服(微信号:xiaolan7321),参加信息学的学习。我们是专业的信息学竞赛教练,采用线上小班授课的方式,目标是帮助热爱编程的中小学生,在国内外信息学竞赛中取得优秀成绩。

教学特点:

  • 线上小班授课,打好代码基础。避免大班课堂上学生要么“跟不上”,要么“吃不饱”的问题。

  • 教学经验丰富,熟悉学生的知识结构与学习能力,合理安排进度。

  • 以赛代练,通过考级与比赛,不断提高学生能力。

猜你喜欢

转载自blog.csdn.net/davidliule/article/details/106139533
今日推荐